函数调用顺序错误

Rag*_*van 6 c++ evaluation function unspecified

这就是我今天编写的内容

#include <iostream>
using namespace std;

int function1()
{
  cout<<"hello from function1()"; return 0;
}

int function2()
{
  cout<<"hello from function2()"; return 0;
}

int main()
{
    int func_diffresult = 0;
    func_diffresult = function1() - function2();
    cout<<func_diffresult; /** prints 0 correctly **/
}
Run Code Online (Sandbox Code Playgroud)

输出是得到的hello from function2()hello from function1().我认为输出应该是hello from function1()hello from function2().我的编译器和我一起玩吗?

Pra*_*rav 10

未指定-运算符的参数的评估顺序.因此可以按任何顺序调用函数.


Zoo*_*oba 5

-操作者有效地变成operator-(function1(), function2()),和功能参数计算顺序是故意未指定的.


相关说明:

保留未指定的一个很好的理由是有效地处理调用约定.例如,C调用约定要求以相反的顺序在堆栈上推送参数.

因此,以相反的顺序评估函数是有意义的,因为可以立即推送结果.要从左到右评估参数,然后从右到左推送结果,请在推送任何结果之前存储所有结果.如果您确实需要这样做,可以手动完成.如果对您无关紧要,那么性能优势可能会有所帮助.