我对以下代码感到困惑:
#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
的变化?这是因为转换后的左值到右值基本上位于相同的内存位置,但它现在只被视为右值?我的印象(这可能是假的)不知何故演员在其论证中创造了一个临时的。
答案 0 :(得分:5)
右值参考是一个参考。在这里,它就像任何其他参考一样工作。
答案 1 :(得分:4)
右值引用可以绑定到临时值。这就是你得到的,例如,如果你写
int x{};
int&& rvx = +x;
但它 不需要绑定到临时。通过将x
强制转换为int&&
,您已向编译器表明也可以,它可以将x
视为右值直接绑定到引用。