[英]GCC constant temporary in binary expression
考慮以下代碼:
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
}
VC接受表達式1和2。 GCC以“無可行的重載'+ ='”拒絕表達式2。 但是,這樣的表達式對於引用常量對象的運算符是可接受的:
const A& operator+=( const A& a, int i ) { return a; }
為什么GCC強制在操作員上下文中將此臨時變量保持不變,而在方法調用上下文中不在環境中,則此行為正確嗎?
A();
創建臨時的。
A& operator+=( A& a, int i ) { return a; }
臨時不能綁定到reference
。 MSVC接受這一點,因為它是非標准擴展。 看從右值到左值的轉換Visual Studio
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.