std::cout 參數的求值順序
傳遞給std::cout 的參數的求值順序可能會令人困惑,尤其是當一個或多個參數是修改另一個參數值的函數呼叫時。
程式碼範例
考慮以下C 程式碼片段:
#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
意外輸出
意外輸出
意外輸出
意外輸出
std::cout << "Value of test before function call: " << test << std::endl; foo(test); std::cout << "Value of test after function call: " << test << std::endl;意外輸出
Value of test before function call: 0 Value of test after function call: 1意外輸出執行時,此程式碼會產生以下輸出: 這個輸出可能看起來令人驚訝,因為人們可能會期望 test 的值在呼叫 foo 函數後為 1。 說明C 標準沒有指定std::cout 中參數的求值順序,除了a一些特定情況,例如邏輯運算子(&&、||)和三元運算子(? :)。 在此範例中,編譯器是可以按照它選擇的任何順序自由地評估參數。在本例中,首先評估 foo 函數,將 test 的值修改為 1.0。但是,std::cout 語句中儲存的 test 值仍然是 0.0,因為 std::cout 語句是在呼叫 foo 函數之前計算的。 解決方案 為了確保所需的評估順序,程式碼應重寫如下:這可以確保測試在foo 函數呼叫前後評估,產生預期的輸出:
以上是參數求值順序如何影響 C 中的「std::cout」輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!