考虑下面的代码:C++移算符优先古怪
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();
奇怪的是,编译器生成的代码,其评估intResult1
BEFOREintResult0
(与最新VC UND GCC测试)。 为什么编译器会这样做?通过这样做,各个值的评估和使用之间的时间(不必要地)增加(?),即首先获取42,但最后被推到矢量上。 C++标准是否规定了这一点?
嘿,我只是碰到了这个昨晚与运营商+ = ŧ他让我感到困惑的是,读取代码时,您会期望intResult1必须被第二次调用,因为它使用intResult0返回的值作为它的第一个参数。 – Dolphin 2009-06-15 16:25:00