考虑如下代码
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中文网2017-04-17 15:18:02
あなたのコードには問題があります。それは私のコードです。
リーリーあなたのコードはサンプルコードですか? オーバーロードされた演算子 は間違っていますか? オーバーロードされた は次のようになりますか? リーリー
何を言っているのかよくわかりません。右辺値も代入できることを思い出しました。
関数によって返された右辺値が参照の場合はどうなりますか?
次のコードのようにリーリー
怪我咯2017-04-17 15:18:02
「左辺値」と「右辺値」を等号の両側に現れるものとして単純に理解することはできません。特にクラスオブジェクトが等号の左側にある場合、オブジェクトの割り当ては実際には関数 operator=
を呼び出すことで完了します:
(a * b) = c
==> (a*b).operator=(c)