首頁 >後端開發 >C++ >C 的 `std::cout` 如何評估參數,為什麼順序很重要?

C 的 `std::cout` 如何評估參數,為什麼順序很重要?

DDD
DDD原創
2025-01-05 08:18:43579瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn