当两个函数位于一行时,堆栈帧的外观如何?

时间:2018-02-08 14:13:18

标签: c++

例如,我们有

int p(void) {
  return 4;
}

int q(void) {
  return 5;
}

int main(void) {
  int x = p() + q();
  return 0;
}

在这种情况下,堆栈框架如何?确切地说,是同时评估p和q,还是在p首次评估为4之后,程序进入q?

1 个答案:

答案 0 :(得分:4)

来自cppreference

  

评估几乎所有C ++运算符的操作数的顺序   (包括评估函数参数的顺序   函数调用表达式和评估的顺序   任何表达式中的子表达式都是未指定的。编译器可以   以任何顺序评估操作数,并可在选择时选择另一个订单   再次评估相同的表达式。

     

此规则有例外情况,如下所述。

     

除非下文所述,否则没有从左到右或从左到右的概念   C ++中从右到左的评估。这是不要混淆的   运营商的从左到右和从右到左的相关性:   表达式f1()+ f2()+ f3()被解析为(f1()+ f2())+ f3()由于   operator +的左右关联性,但函数调用f3   可以在运行时的第一个,最后一个或f1()或f2()之间进行评估