std::cout 삽입 순서에서 인수 평가
C에서 std::cout 삽입을 사용하는 표현식의 인수 평가 순서 운영자가 혼란스러울 수 있습니다. 다음 코드 조각을 고려하세요.
#include <iostream> bool foo(double &m) { m = 1.0; return true; } int main() { double test = 0.0; std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << foo(test) << "\tValue of test : " << test << std::endl; return 0; }
이 코드의 출력은 놀랍습니다.
Value of test is : 1 Return value of function is : 1 Value of test : 0
이 출력을 이해하려면 인수 평가 순서를 자세히 살펴봐야 합니다.
지정되지 않은 평가 순서
일반적으로 C는 그렇지 않습니다. 표현식에서 인수의 평가 순서를 지정합니다. 이는 컴파일러가 결정합니다. 그러나 다음과 같은 몇 가지 예외가 있습니다.
와 같은 특정 연산자에 의해 도입된 시퀀스 포인트 왼쪽에서 오른쪽으로 평가 가정
std::cout 삽입 시 왼쪽에서 오른쪽으로 평가한다고 가정하는 것이 일반적이지만 이는 보장되지 않습니다. 이 예에서 세 번째 인수의 "섀도잉" 테스트는 foo를 호출하기 전에 평가되어 이를 수정합니다.
혼란 해결
의도한 결과를 보장하려면 평가 순서, 표현식을 별도의 문으로 분할:
double test = 0.0; std::cout << "Value of test is : \t" << test << std::endl; std::cout << "Return value of function is : " << foo(test) << std::endl; std::cout << "Value of test : " << test << std::endl;
이 코드는 올바르게 사용되었습니다. 출력:
Value of test is : 0 Return value of function is : 1 Value of test : 1
위 내용은 C에서 std::cout 인수 평가 순서를 예측할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!