c++ - 关于左右值的疑问?
PHP中文网
PHP中文网 2017-04-17 15:16:02
0
2
424

考虑如下代码

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中文网
PHP中文网

认证高级PHP讲师

全員に返信(2)
洪涛

あなたのコードには問題があります。それは私のコードです。

リーリー

あなたのコードはサンプルコードですか? オーバーロードされた演算子 は間違っていますか? オーバーロードされた は次のようになりますか? リーリー

何を言っているのかよくわかりません。

右辺値も代入できることを思い出しました。

関数によって返された右辺値が参照の場合はどうなりますか?

次のコードのように

リーリー

いいねを押す +0
刘奇

「左辺値」と「右辺値」を等号の両側に現れるものとして単純に理解することはできません。特にクラスオブジェクトが等号の左側にある場合、オブジェクトの割り当ては実際には関数 operator= を呼び出すことで完了します:

(a * b) = c ==> (a*b).operator=(c)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート