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 : 1
그러나 실제 출력은 컴파일러와 플랫폼에 따라 다를 수 있습니다. 코드는 다음을 인쇄할 수 있습니다.
Value of test is : 1 Return value of function is : 1 Value of test : 0
이는 std::cout 문의 인수 평가 순서가 정의되지 않았기 때문입니다. 첫 번째 경우 test는 foo() 호출 전에 평가되므로 1이 인쇄됩니다. 두 번째 경우 test는 foo() 호출 후에 평가되므로 0이 인쇄됩니다.
올바른 순서를 보장하려면 , 표현식을 여러 문으로 분할합니다.
double test_after_foo = foo(test); std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << test_after_foo << "\tValue of test : " << test_after_foo << std::endl;
이렇게 하면 foo(test)가 std::cout 문보다 먼저 평가되어 여러 컴파일러에서 일관된 출력을 제공하고 플랫폼입니다.
위 내용은 `std::cout`에서 인수 평가 순서가 지정되지 않은 이유는 무엇이며 일관된 출력을 보장하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!