首頁 >後端開發 >C++ >參數求值順序如何影響 C 中的「std::cout」輸出?

參數求值順序如何影響 C 中的「std::cout」輸出?

Susan Sarandon
Susan Sarandon原創
2025-01-01 10:45:111023瀏覽

How Does Argument Evaluation Order Affect `std::cout` Output in C  ?

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

意外輸出

意外輸出

意外輸出

意外輸出

std::cout << "Value of test before function call: " << test << std::endl;
foo(test);
std::cout << "Value of test after function call: " << test << std::endl;

意外輸出
Value of test before function call: 0
Value of test after function call: 1
意外輸出執行時,此程式碼會產生以下輸出: 這個輸出可能看起來令人驚訝,因為人們可能會期望 test 的值在呼叫 foo 函數後為 1。 說明C 標準沒有指定std::cout 中參數的求值順序,除了a一些特定情況,例如邏輯運算子(&&、||)和三元運算子(? :)。 在此範例中,編譯器是可以按照它選擇的任何順序自由地評估參數。在本例中,首先評估 foo 函數,將 test 的值修改為 1.0。但是,std::cout 語句中儲存的 test 值仍然是 0.0,因為 std::cout 語句是在呼叫 foo 函數之前計算的。 解決方案 為了確保所需的評估順序,程式碼應重寫如下:這可以確保測試在foo 函數呼叫前後評估,​​產生預期的輸出:

以上是參數求值順序如何影響 C 中的「std::cout」輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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