功能调用顺序

Hem*_*Hem 3 c c++

函数在以下表达式中调用的顺序是什么:

a = f1(23, 14) * f2(12/4) + f3();
Run Code Online (Sandbox Code Playgroud)

它取决于编译器吗?

Naw*_*waz 12

在C和C++中未指定每个操作数的评估顺序,这意味着,在您的情况下,函数调用的顺序按照标准指定.

请注意,它未指定, 实现定义.

  • 正确使用未指定与实现定义的+1似乎会引起很多混淆 (3认同)
  • @hroptatyr:不同之处在于实现必须记录实现定义的行为. (3认同)

Alo*_*ave 6

它在C和C++中都未指定.

参考文献:

C++ 03标准:第5节:表达式,第4段:

除非注明[例如&&和||的特殊规则],否则各个运算符的操作数和各个表达式的子表达式的评估顺序以及副作用发生顺序是未指定的.

C99标准:第6.5节:

运算符和操作数的分组由语法表示.72)除了稍后指定的(对于函数调用(),&&,||,?:和逗号运算符),子表达式的评估顺序和顺序发生哪些副作用都是未指明的.