1. ホーム
  2. c++

[解決済み] A() = A() - なぜコンパイルできるのか?

2023-06-22 10:59:22

疑問点

class A {};

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

なぜこのコードはコンパイルできるのでしょうか?代入演算子の左側にはlvalueが置かれるはずですが、エラーにならないのでしょうか?A()はlvalueですか? g++ 4.7版

どのように解決するのですか?

組み込み型については、あなたは正しいでしょう:組み込みの代入演算子は、変更可能な lvalue を左手に必要とします。

しかし、これは組み込みの演算子ではなく、クラスが暗黙のうちに宣言しているオーバーロードを使用しています。これはメンバ関数で、次のものと同等です。

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

であり、メンバ関数を呼び出すことができるのは rvalues .