0

我对以下代码感到困惑:

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

4

2 回答 2

5

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

于 2015-02-17T22:18:03.390 回答
4

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

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

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

于 2015-02-17T22:20:34.423 回答