2012-06-01 3 views
0

I 다음은 접미사에 실제로 붙지 않습니다. 첫 번째는 i, 그 다음은 ++을 보여주기 때문에 먼저 식별자를 사용하고 증가 또는 감소한다고 알고 있습니다. 하지만 지금은 내가 잘못 생각하고 여전히 그것을 이해하지 않습니다.접미사가 읽히기 전에 식별자를 변경합니까?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int i = 0; 
    cout << i << i++ << i; 
    cout << "\n\n\nPress Enter to close the window . . . "; 
    cin.clear(); 
    cin.sync(); 
    cin.get(); 
    return 0; 
} 

는 출력 :

101 


Press Enter to close the window . . . 

i 증가 readed.Why 전에 변경?

나는 누군가가 설명 할 수
001 

Press Enter to close the window . . . 

을 기대했다.

+0

감사합니다. –

+0

실제로 답변을 수락하기 전에 표시된 복제본 중 하나를 읽었습니까? 당신이 받아 들인 답이 분명히 틀렸기 때문입니다. –

답변

5

그냥 그런 일을하지 않을, 당신이 당신의 예상 결과를 원하는 경우

cout << i << i++ << i; 

cout << i << i << (i + 1); 
i ++; 

을 정의되지 않습니다.


cout << i++; 

이 정의 된 경우 완벽하게 확인.

+0

불행히도, 왜 설명되지 않으며 * 정의되지 않은 *. – Walter

-1

무엇이 정의되지 않았는지 생각합니다. *) 여기에는 함수 인수 평가의 주문이 있습니다. 당신의

cout << i << i++ << i; 

로 확장 있도록 (과부하)

std::ostream& operator<< (std::ostream&, int); 

첫 번째 인수는 동일한 기능에 대한 다른 통화의 출력이되는 함수 호출 당신이 실제로 여기에 요구하고있다

operator<<(operator<<(operator<<(cout,i), i++), i); 

함수 인수가 평가되는 순서가 지정되지 않았으므로 여기에서 어떤 것도 발생할 수 있습니다. 당신은 서면으로 별도의 선으로이를 방지 할 수 있습니다 무해한

operator<<(cout,i); 
operator<<(cout,i++); 
operator<<(cout,i); 

*) 편집으로 확장

cout << i; 
cout << i++; 
cout << i; 

이 : 더 정확하게하려면 cout<<i<<i++;정의되지 않은 때문에 기능의 평가 순서 인수는 으로 지정되지 않았습니다..

+2

-1 함수에 대한 인수의 평가 순서가 Undefined가 아니며 Unspecified입니다. Unspecified & Undefined는 동일하지 않습니다. 또한 설명이 왜 Undefined Behavior인지 정확하게 설명하지 않습니다.표시된 복제본의 답을 확인하여 이것이 정의되지 않은 행동임을 정확히 알아보십시오. –

+0

@Als 왜 편집하고 수정하는 대신 나를 비판합니까? 나는이 사이트가 다른 사람들보다 더 영리 해지는 경쟁이 아니라 상호 도움을위한 것이라고 생각했다. btw, 나는 분명히 복제 링크를 따르지 않았다. – Walter

+2

내가 잘못 편집하고 정정하기를 기대하고 있습니까? 이미 여기에 대해 매우 자세히 설명해 놓았습니다. (http://stackoverflow.com/a/10782963/452307) 당신이 이해할 수 없기 때문에 질문하고 해결해야합니다. 귀하의 의심은 잘못된 답변을 게시하지 않습니다. 투표는 답변에 대한 정확성 또는 불만을 나타내는 방법입니다. 나는 대답이 잘못되었으므로 줄였습니다. 비판을 받아 들일 수 없다면 게시하지 마십시오. 참고 답변은 여전히 ​​잘못된 것입니다. –

관련 문제