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().我的编译器和我一起玩吗?
的-操作者有效地变成operator-(function1(), function2()),和功能参数计算顺序是故意未指定的.
相关说明:
保留未指定的一个很好的理由是有效地处理调用约定.例如,C调用约定要求以相反的顺序在堆栈上推送参数.
因此,以相反的顺序评估函数是有意义的,因为可以立即推送结果.要从左到右评估参数,然后从右到左推送结果,请在推送任何结果之前存储所有结果.如果您确实需要这样做,可以手动完成.如果对您无关紧要,那么性能优势可能会有所帮助.