考慮下面的代碼: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