> 백엔드 개발 > C++ > C의 `std::cout`은 인수를 어떻게 평가하며 순서가 중요한 이유는 무엇입니까?

C의 `std::cout`은 인수를 어떻게 평가하며 순서가 중요한 이유는 무엇입니까?

DDD
풀어 주다: 2025-01-05 08:18:43
원래의
565명이 탐색했습니다.

How Does C  's `std::cout` Evaluate Arguments, and Why Does Order Matter?

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;
}
로그인 후 복사

이 코드는 foo 호출 전후에 test 값을 인쇄하는 것처럼 보일 수 있습니다. 기능. 그러나 출력에서는 다음과 같이 제안합니다.

Value of test is :      1       Return value of function is : 1 Value of test : 0
로그인 후 복사

이 동작은 표현식의 평가 순서가 지정되지 않았기 때문에 발생합니다. 가장 오른쪽에 있는 인수(test 값)가 먼저 평가되는 것이 직관적으로 보일 수 있지만 이것이 보장되지는 않습니다.

원하는 평가 순서를 보장하려면 다음과 같이 표현식을 별도의 문으로 명시적으로 분할하세요. 아래와 같습니다:

double value = test;
std::cout << "Value of test is : \t" << value << "\tReturn value of function is : " << foo(test) <<  "\tValue of test : " << test << std::endl;
로그인 후 복사

이렇게 하면 foo 함수가 호출되기 전에 test 값이 value에 복사됩니다. 결과적으로 이제 출력은 예상되는 평가 순서를 정확하게 반영합니다.

Value of test is :      0       Return value of function is : 1 Value of test : 1
로그인 후 복사

위 내용은 C의 `std::cout`은 인수를 어떻게 평가하며 순서가 중요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿