0

次のコードに困惑しています。

#include <iostream>

int main()
{
    int x{};

    int&& rvx = static_cast<int&&>(x);
    ++rvx;
    std::cout << x << std::endl;
}

その出力は1. これがどのように機能するかわかりません。はstatic_cast、左辺値xを xvalue にキャストし、それを に代入することになっていrvxます。rvxインクリメントすると が変化するのはなぜxですか? これは、変換された左辺値から右辺値が本質的に同じメモリ位置にあるためですが、現在は右辺値と見なされているためですか? 私は、どういうわけかキャストがその引数から一時的なものを作成するという印象を受けました (これはおそらく誤りです)。

4

2 に答える 2

5

右辺値参照は参照です。これでは、他の参照と同じように機能します。

于 2015-02-17T22:18:03.390 に答える
4

右辺値参照は一時にバインドできます。これは、たとえば、次のように書くと得られるものです

int x{};
int&& rvx = +x;

ただし、一時的にバインドする必要はありません。にキャストxすることで、参照に直接バインドする右辺値としてint&&扱うこともできることをコンパイラに示しました。x

于 2015-02-17T22:20:34.423 に答える