考慮下面的代碼:GCC恆定臨時在二元表達
struct A {
A& add(int i) { return *this; }
};
A& operator+=(A& a, int i) { return a; }
void f() {
A a1 = A().add(1); // expr 1
A a2 = A() += 1; // expr 2
}
兩個表達式1和2由VC接受。表達式2被GCC拒絕,並且「No viable overloaded'+ ='」。然而,這樣的表達接受採取引用常量對象運營商:
const A& operator+=(const A& a, int i) { return a; }
爲什麼GCC迫使這個臨時要在運營商方面不斷不用時方法調用上下文,這是正確的行爲?
調高MSVC的警告水平,它會告訴你答案。 –