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中文网其他相关文章!