右值引用在这里如何工作?

How does rvalue reference work here?

我对下面的代码很疑惑:

#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 发生变化?这是因为转换后的左值到右值本质上位于相同的内存位置,但它现在只是被认为是右值吗?我的印象是(这可能是错误的)演员以某种方式从其论点中创造了一个临时的。

右值引用是引用。在这方面,它的工作方式与任何其他参考一样。

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

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

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