右值引用在这里如何工作?
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
视为右值以直接绑定到引用。
我对下面的代码很疑惑:
#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
视为右值以直接绑定到引用。