ホームページ > バックエンド開発 > 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート