2013-04-01 1 views
4

iint 인 경우 ++i + ++i과 같은 표현은 정의되지 않은 동작이므로 i의 시퀀스되지 않은 수정이 2 개 있습니다. 그러나 i이 일부 int과 같은 클래스 인 경우 ++i + ++i은 불확실한 순차적 수정을 가지므로 동작이 정의됩니다 (이 경우 결정적 결과가 있음). 불확실한 시퀀스가 ​​아니라 원시 시퀀스에 대한 연산이 순차 화되지 않는 경우가 있습니까? 그렇다면이 경우가 사용자가 만든 유형에 적용되지 않는 이유는 무엇입니까? 그렇지 않다면 원시 연산은 왜 순차 화되지 않습니까?원시 타입에 대한 연산의 순서가 불확실하지 않은 이유는 무엇입니까?

+2

정의되지 않은 동작이 발생하면 컴파일러에서 특정 클래스의 최적화를 적용 할 수 있습니다. 이러한 최적화가 UDT에 적용될 것 같지 않습니다. 일반적으로 ++ i는 함수 호출을위한 구문 설탕입니다. –

답변

3

일반적으로 가능한 한 많은 순차가 없습니다.

C++에서 두 개의 함수가 인터리빙을 실행할 수 없습니다. 그러므로 두 개의 operator++ 구현을 인터리빙하는 것은 불가능합니다.

따라서, operator++을 구현하는 클래스 유형의 경우, 이것은 불확실한 순서로 배열됩니다.

관련 문제