c++中对于cout后面的表达式的求值顺序是未定义的,具体的运行结果要由编译器的实现来决定.
本人是在vc++ 6.0下编译的.
测试代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int add(){
cout<<"function add"<<endl;
return 1;
}
int sub(){
cout<<"function sub"<<endl;
return 2;
}
int main(int argc, char* argv[])
{
cout<<add()<<sub()<<endl;
return 0;
}
输出结果:
因为在我所用的编译器下 cout后的表达式求值是从右向左的, 所以从右向左先执行sub函数,输出function sub,函数返回值为2,入栈,再执行add函数,输出function add,函数返回值为1,入栈;
如图:
然后从栈顶取值, 输出12
总结:1 该现象在c++标准中是未定义行为, 运行结果完全取决于编译器实现
2 在6.0中是先从右向左计算各表达式的值后入栈, 然后从栈顶取值输出.
3 此规则也适用于其它的一些输出函数或表达式.