簡體   English   中英

GCC常量臨時二進制表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM