考虑如下代码
class Foo { public: int x, y; }; Foo operator*(const Foo &lhs, const Foo &rhs) { Foo ret; return ret; } int main() { Foo a, b, c; (a * b) = c; return 0; }
operator*(a, b)返回的应该是一个右值,为什么可以被赋值呢??编译器没有提示错误。
认证高级PHP讲师
あなたのコードには問題があります。それは私のコードです。
あなたのコードはサンプルコードですか? オーバーロードされた演算子 は間違っていますか? オーバーロードされた は次のようになりますか? リーリー
関数によって返された右辺値が参照の場合はどうなりますか?
リーリー
「左辺値」と「右辺値」を等号の両側に現れるものとして単純に理解することはできません。特にクラスオブジェクトが等号の左側にある場合、オブジェクトの割り当ては実際には関数 operator= を呼び出すことで完了します:
operator=
(a * b) = c ==> (a*b).operator=(c)
(a * b) = c
(a*b).operator=(c)
あなたのコードには問題があります。それは私のコードです。
リーリーあなたのコードはサンプルコードですか? オーバーロードされた演算子 は間違っていますか? オーバーロードされた は次のようになりますか? リーリー
何を言っているのかよくわかりません。関数によって返された右辺値が参照の場合はどうなりますか?
次のコードのようにリーリー
「左辺値」と「右辺値」を等号の両側に現れるものとして単純に理解することはできません。特にクラスオブジェクトが等号の左側にある場合、オブジェクトの割り当ては実際には関数
operator=
を呼び出すことで完了します:(a * b) = c
==>(a*b).operator=(c)