以 f() + g() 调用顺序的 C++ 函数

c++ function invoking order in f() + g()

本文关键字:C++ 函数 顺序 调用      更新时间:2023-10-16

如果我确实喜欢这个

f() + g();

或者像这样

h(f() + g());

在C++中是否保证首先调用 f((?

>C++不保证+运算符操作数的计算顺序。

可以先调用f()g()

这由C++标准的第 1.9p15 节指定:

除非另有说明,否则对单个运算符的操作数的评估 和单个表达式的子表达式是未排序的。[ 注意:在 程序的执行,未排序和不确定顺序 不需要一致地执行其子表达式的计算 在不同的评估中。— 尾注 ] 的值计算 运算符的操作数在计算值之前进行排序 运算符的结果。如果标量对象的副作用是 相对于同一标量上的另一个副作用的未排序 对象或使用相同标量值的值计算 对象,则行为未定义。

处理此问题的最佳方法是在单独的语句中执行函数:

int a = f();
int b = g();
h(a + b);

根据这个,没有保证:

编译器将以任何顺序评估它们,并可以选择另一个 再次计算相同表达式时的顺序。

免责声明:至少在 C 中是这种情况,我不确定在C++中是否相同。

编辑:我刚刚在同一网站上查找了C++版本,它也没有在C++中指定。