右值参考如何在这里工作?

时间:2015-02-17 22:16:39

标签: c++ c++11 rvalue-reference lvalue-to-rvalue

我对以下代码感到困惑:

#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的变化?这是因为转换后的左值到右值基本上位于相同的内存位置,但它现在只被视为右值?我的印象(这可能是假的)不知何故演员在其论证中创造了一个临时的。

2 个答案:

答案 0 :(得分:5)

右值参考是一个参考。在这里,它就像任何其他参考一样工作。

答案 1 :(得分:4)

右值引用可以绑定到临时值。这就是你得到的,例如,如果你写

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

但它 不需要绑定到临时。通过将x强制转换为int&&,您已向编译器表明也可以,它可以将x视为右值直接绑定到引用。