C++의 std :: cout은 흥미로운 것으로 보입니다. 오늘 내 C++ 컴파일러에서 다음 프로그램을 시도 :std :: cout 혼합 된 이상한 출력
cout<<"!"<<"@"<<endl;
cout<<"!"<<cout<<"@"<<endl;
cout<<"!"<<(cout<<"@")<<endl;
그리고 출력은 오히려 호기심 :
[email protected]
[email protected]
@!0x601068
첫 번째 줄은 보행자; 두 번째는 이해할 수있다. 그러나 세 번째 줄은 내 지식을 초월합니다. 누군가가 결과를 설명 할 수 있습니까? 여러분 모두 미리 감사드립니다!
지야 오 웨이
당신이 서브를 일으키는 최적화라고 확신합니까? - 표현이 먼저 발생합니까? 나는 이것을 한 시퀀스 포인트라고 생각했다. – quamrana
명령문의 시작과 끝에 시퀀스 포인트가 있습니다. 메소드를 호출하기 전후의 시퀀스 포인트 (주 : operator <<는 메소드 호출). 다른 모든 것들은 움직일 수 있습니다. 여기서 유일한 제한은'(cout << "@" ")'이 매개 변수로 사용되기 전에 완전히 평가되어야한다는 것이다. 날씨 이것은 첫 번째 메서드 호출이 컴파일러가 수행하는 최적화에 따라 달라지기 전이나 후에 수행됩니다. –