6

(++i)++ 정의되지 않은 동작입니까? 접미사 증분의 부작용이 후위 증가를 위해 증분 된 객체를 검색 한 후에 발생할 수 있습니까? 그것은 나에게 이상하게 보일 것이다.(++ i) ++ 정의되지 않은 동작입니까?

내 직감에 따르면 C++ 03에서는 정의되지 않았으며 C++ 11에서는 잘 정의되어 있습니다. 내가 맞습니까?

+0

당신의 직감이 옳습니다. – ybungalobill

+43

왜 그렇게 많은 사람들이 이것에 대해 질문합니까? 그냥하지 마. ** 끔찍한 코드이고 아무렇게나 써서는 안됩니다. ** – jjnguy

+12

@ jjnguy : 필자는 "작성해서는 안됩니다"와 "중요한 코드를 사용하지 말아야합니다."를 구별합니다. . " 그것으로부터 배우기 위해 알려진 나쁜 코드를 작성하는 것이 좋습니다. 제어 된 방식으로 실패하고, 예측 된 실패 등을 테스트하십시오. – David

답변

11

내 직감에 의하면 이것은 C++ 03에서는 정의되지 않았으며 C++ 0x에서는 잘 정의되어 있습니다.

네 말이 맞습니다. 두 시퀀스 포인트 사이에서 두 번 이상 i을 수정하려고하므로 C++ 03에서이 동작이 정의되지 않았습니다.

(++i)++(i += 1)++과 같기 때문에 동작은 C++ 0x에서 잘 정의되어 있습니다. += 연산자의 부작용은 ++ (후행 증가)에 상대적으로 순서가 지정되므로 동작이 잘 정의되어 있습니다.

0

두 시퀀스 포인트간에 i이 두 번 이상 수정되므로 정의되지 않은 동작입니다.