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