85
class A {};

int main() {
 A() = A();
 return 0; 
}

このコードがコンパイルされるのはなぜですか? 代入演算子の左側に左辺値を配置する必要があるというエラーがあるべきではありませんか? A() は左辺値ですか? g++ 4.7 バージョン

4

3 に答える 3

88

組み込み型の場合は、正しいでしょう。組み込み代入演算子には、左側に変更可能な左辺値が必要です。

ただし、これは組み込みの演算子ではなく、クラスによって暗黙的に宣言されたオーバーロードを使用しています。これはメンバー関数であり、

A().operator=(A());

メンバー関数は右辺値で呼び出すことができます。

于 2013-04-30T15:11:52.407 に答える