検索

ホームページ  >  に質問  >  本文

c++ - 关于左右值的疑问?

考虑如下代码

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中文网2772日前428

全員に返信(2)返信します

  • PHP中文网

    PHP中文网2017-04-17 15:18:02

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

    リーリー

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

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

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

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

    次のコードのように

    リーリー

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 15:18:02

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

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

    返事
    0
  • キャンセル返事