|
전승호 님이 쓰신 글 :
: #include <iostream.h>
: void main()
: {
: int i;
: i=1;
: cout << i << '\t' << i++ << '\t' << i++ << '\n';
: i=1;
: cout << i << '\t' << ++i << '\t' << ++i << '\n';
: i=10;
: cout << i << '\t' << i-- << '\t' << i-- << '\n';
: i=10;
: cout << i << '\t' << --i << '\t' << --i << '\n';
: cout << (i*=2) << '\n';
: cout << (i*=2) << "\n";
: }
: 를 실행했을때 저의 생각엔 당연히
: 1 1 2
: 1 2 3
: 10 10 9
: 10 9 8
: 16
: 32
: 가 될것 같은데 이상하게 컴퓨터는
: 3 2 1
: 3 3 2
: 8 9 10
: 8 8 9
: 16
: 32로 찍히더군요. 저의 생각엔 변수의 제어가
: cout << i << '\t' << i++ << '\t' << i++ << '\n'; /* <---에서
: 왼쪽에서 오른쪽으로 즉 i --> i++ --> i++ 로 될것
: 같은데 이상하게 컴퓨터는 그 반대로 실행을 한것 같습니다.
: 만약에 컴퓨터대로 또 반대로 한다고 하여도 그러면 가장
: 먼저 '\t'가 실행되야 할텐데 그것도 아니고......
: 정말 궁금합니다.
: 꼭좀 가르쳐 주세요.
:
임펠리테리입니다.
C++에서 << 연산자는 우->좌로 연산하는 연산자입니다. 다시 말해, 피연산자 두개중 오른쪽 것을 먼저 값을 알아낸 후 왼쪽으로 진행하는 것입니다. 이런 연산 순서가 대부분의 경우에는 문제가 없지만, ++, -- 연산자를 사용한 피연산자를 사용했을 경우에는 결과가 예상했던 것과는 달라지므로 주의해야 합니다. 또한, C++ 표준에서는 함수의 인자를 넘길 때도 가장 오른쪽 인자부터 먼저 계산해서 넘깁니다. 이 경우 함수를 선언할 때 pascal이나 __fastcall 지시자를 사용하면 좌->우로 넘기게 됩니다.
그럼 참고하시길...
|