Consider the following code:
typedef vector<int> intVec;
intVec& operator<<(intVec& dst, const int i) {
dst.push_back(i);
return dst;
}
int intResult0() {
return 23;
}
int intResult1() {
return 42;
}
// main
intVec v;
v << intResult0() << intResult1();
奇怪的是,编译器生成的代码会在评估intResult0
之前评估intResult1
(使用最新的VC和gcc进行测试)。
为什么编译器会这样做?这样做会增加各个值之间的评估和使用时间(不必要地),即先获取42,但最后将其推入向量中。
C++标准是否规定了这一点?