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; }
此程式碼的預期輸出為:
Value of test is : 1 Return value of function is : 1 Value of test : 1
但是,實際輸出可能會因編譯器和平台的不同而有所不同。程式碼可能會列印:
Value of test is : 1 Return value of function is : 1 Value of test : 0
這是因為 std::cout 語句中參數的求值順序未定義。在第一種情況下,test 在 foo() 呼叫之前評估,因此它會列印 1。在第二種情況下,test 在 foo() 呼叫之後評估,因此它會列印 0。
確保正確的排序,將表達式拆分為多個語句:
double test_after_foo = foo(test); std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << test_after_foo << "\tValue of test : " << test_after_foo << std::endl;
這保證了foo(test) 在std::cout 語句之前計算,從而在不同編譯器之間提供一致的輸出平台。
以上是為什麼 `std::cout` 中參數求值的順序未指定,如何確保輸出一致?的詳細內容。更多資訊請關注PHP中文網其他相關文章!