ホームページ >バックエンド開発 >C++ >`std::cout` の引数の評価順序は何によって決まりますか?

`std::cout` の引数の評価順序は何によって決まりますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 11:44:33530ブラウズ

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

std::cout の評価順序

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;
}

驚くべきことに、このコードの出力は次のとおりです:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。