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