首頁 > 後端開發 > C++ > 什麼決定了 `std::cout` 中參數的求值順序?

什麼決定了 `std::cout` 中參數的求值順序?

Barbara Streisand
發布: 2024-12-25 11:44:33
原創
523 人瀏覽過

What Determines the Evaluation Order of Arguments in `std::cout`?

Evaluation Order in std::cout

Confusion often arises regarding the orderorder of argument evaluations when ider像 ). the following code snippet:

#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
登入後複製

這違背了想像中的從左到右的求值順序。

具體原因

在C 中,表達式元素的求值順序是不確定的(除了一些特殊情況,如&& 和|| 運算子以及引入順序點的三元運算子)。因此,不能保證 test 會在 foo(test)(會修改 test 的值)之前或之後求值。

解決方法

如果程式碼依賴於特定的求值順序,最簡單的方法是在多個單獨的語句中分割表達式,如下所示:

std::cout << "Value of test is: \t" << test << std::endl;
foo(test);
std::cout << "Return value of function is: " << foo(test) << std::endl;
std::cout << "Value of test: " << test << std::endl;
登入後複製

這樣,求值順序將明確定義為由上到下。

以上是什麼決定了 `std::cout` 中參數的求值順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板