(++ x)+(++ x)+(++ x)의 결과를 어떻게 설명합니까?
-
19-09-2019 - |
문제
x = 1;
std::cout << ((++x)+(++x)+(++x));
나는 출력이 될 것으로 기대한다 11
, 그러나 실제로는입니다 12
. 왜요?
해결책
우리는 기대함으로써 그것을 설명합니다 정의되지 않은 행동 특정 결과보다는. 표현이 개입하지 않고 X를 여러 번 수정하려고 시도함에 따라 시퀀스 포인트 그것의 행동은 정의되지 않습니다.
다른 팁
다른 사람들이 말했듯이 C 및 C ++ 표준은 이것이 생성 할 동작을 정의하지 않습니다.
그러나 표준이 왜 그런 일을하는지 알지 못하는 사람들에게는 "실제 세계"예를 살펴 보겠습니다.
1 * 2 + 3 + 4 * 5
계산에는 아무런 문제가 없습니다 1 * 2 + 3
계산하기 전에 4*5
. 곱셈이 추가보다 우선 순위가 높다고해서 우리가 수행해야한다는 의미는 아닙니다. 모두 추가하기 전에 표현의 곱셈. 실제로 계산을 수행 할 수있는 여러 가지 주문이 있습니다.
평가에 부작용이있는 경우 다른 평가 순서가 결과에 영향을 줄 수 있습니다. 표준이 동작을 정의하지 않으면 그것에 의존하지 마십시오.
이것은 실제로 정의되지 않았습니다. C ++는 명령문 실행 순서를 명시 적으로 정의하지 않으므로 컴파일러에 따라 달라 지며이 구문을 사용해서는 안됩니다.
코드 스 니펫이 호출됩니다 정의되지 않은 행동 두 C/C ++에서. 시퀀스 지점에 대해 읽으십시오. 여기.
제 생각에는
cout<<((++x)+(++x)+(++x));
컴파일러 첫 번째 실행 Prefix ++ x 따라서 x의 값이됩니다.
x = 2
이제 ++ x에 의해 X가 될 것입니다
x = 3
++ x 이후
x = 4
이제 x의 값을 추가 할 시간입니다
x+x+x = 4+4+4
x+x+x = 12