右值参考在这里是如何工作的

How does rvalue reference work here?

本文关键字:工作 何工作 值参 参考 在这里      更新时间:2023-10-16

我对以下代码感到困惑:

#include <iostream>
int main()
{
    int x{};
    int&& rvx = static_cast<int&&>(x);
    ++rvx;
    std::cout << x << std::endl;
}

其输出为1。我不明白这是怎么回事。static_cast应该将左值x转换为x值,然后将其分配给rvx。为什么rvx的增加会导致x的变化?这是因为将左值转换为右值本质上位于相同的内存位置,但现在它只是被认为是右值吗?我有一种印象(这可能是错误的),演员阵容在某种程度上创造了一个暂时的论点。

右值引用是一个引用。在这方面,它的工作原理与任何其他引用一样。

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

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

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