例如,我们有
int p(void) {
return 4;
}
int q(void) {
return 5;
}
int main(void) {
int x = p() + q();
return 0;
}
在这种情况下,堆栈框架如何?确切地说,是同时评估p和q,还是在p首次评估为4之后,程序进入q?
答案 0 :(得分:4)
来自cppreference
评估几乎所有C ++运算符的操作数的顺序 (包括评估函数参数的顺序 函数调用表达式和评估的顺序 任何表达式中的子表达式都是未指定的。编译器可以 以任何顺序评估操作数,并可在选择时选择另一个订单 再次评估相同的表达式。
此规则有例外情况,如下所述。
除非下文所述,否则没有从左到右或从左到右的概念 C ++中从右到左的评估。这是不要混淆的 运营商的从左到右和从右到左的相关性: 表达式f1()+ f2()+ f3()被解析为(f1()+ f2())+ f3()由于 operator +的左右关联性,但函数调用f3 可以在运行时的第一个,最后一个或f1()或f2()之间进行评估