std::cout 인수의 평가 순서
std::cout에 전달된 인수의 평가 순서는 특히 혼란스러울 수 있습니다. 하나 이상의 인수가 다른 인수의 값을 수정하는 함수 호출인 경우 인수.
코드 예
다음 C 코드 조각을 고려하세요.
#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
foo 함수가 호출된 후 test 값이 1이 될 것으로 예상할 수 있으므로 이 출력은 놀랍게 보일 수 있습니다.
설명
std::cout의 인수 평가 순서는 논리 연산자와 같은 몇 가지 특정 경우를 제외하고 C 표준에 의해 지정되지 않습니다. (&&, ||) 및 삼항 연산자(? :).
이 예에서 컴파일러는 선택한 순서대로 인수를 자유롭게 평가할 수 있습니다. 이 경우 foo 함수가 먼저 평가되어 test 값을 1.0으로 수정합니다. 그러나 foo 함수가 호출되기 전에 std::cout 문이 평가되기 때문에 std::cout 문에 저장된 test 값은 여전히 0.0입니다.
해결책
원하는 평가 순서를 보장하려면 코드를 다음과 같이 다시 작성해야 합니다.
std::cout << "Value of test before function call: " << test << std::endl; foo(test); std::cout << "Value of test after function call: " << test << std::endl;
이것은 foo 함수 호출 전후에 테스트가 평가되어 예상되는 출력이 생성되는지 확인합니다.
Value of test before function call: 0 Value of test after function call: 1
위 내용은 인수 평가 순서가 C의 `std::cout` 출력에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!