功能调用顺序

ame*_*een 6 c c++

为了表达

(func1() * func2()) + func3()
Run Code Online (Sandbox Code Playgroud)

将func1()*func2()首先计算,因为它有括号或可以按任何顺序调用函数

首先是func3()然后是(func1()*func2())

Ben*_*ley 13

可以按任何顺序调用这些函数.


Pra*_*rav 8

操作符的优先级与操作数的评估顺序无关.

C或C++标准不确定调用函数的顺序..

子表达式的评估顺序,包括

  • 函数调用的参数和
  • 运营商的操作数(例如, +, -, =, * , /),但以下情况除外:
    • 二进制逻辑运算符(&&||),
    • 三元条件运算符(?:)和
    • 逗号运算符(,)

未指定

例如

  int Hello()
  {
       return printf("Hello"); /* printf() returns the number of 
                                  characters successfully printed by it
                               */
  }

  int World()
  {
       return printf("World !");
  }

  int main()
  {

      int a = Hello() + World(); //might print Hello World! or World! Hello
      /**             ^
                      | 
                Functions can be called in either order
      **/
      return 0;
  } 
Run Code Online (Sandbox Code Playgroud)


Pau*_*l R 6

您无法对调用这些函数的顺序做出任何假设.编译器以任何顺序调用这些函数,将结果分配给临时值,然后使用这些临时值来计算表达式的结果,这是完全有效的.