作者:淡若清芬_920 | 来源:互联网 | 2022-12-02 15:06
如果我喜欢这个
f() + g();
或者像这样
h(f() + g());
在C++中是否保证首先调用f()?
1> dbush..:
C++不保证运算+
符操作数的评估顺序.
无论是f()
或g()
可能先调用.
这由C++标准的 1.9p15节规定:
除非另有说明,否则对单个运算符的操作数和单个表达式的子表达式的评估是不确定的.[注意:在程序执行期间不止一次评估的表达式中,不需要在不同的评估中一致地执行对其子表达式的未序列和不确定顺序的评估. - 结束注释]在运算符的结果的值计算之前,对运算符的操作数的值计算进行排序.如果对标量对象的副作用相对于同一标量对象的另一个副作用或使用相同标量对象的值进行的值计算未被排序,则行为未定义.
处理此问题的最佳方法是在单独的语句中执行这些函数:
int a = f();
int b = g();
h(a + b);