为什么c ++ rvalue不是不可变的

har*_*orn 1 c++ rvalue lvalue

码:

void test(int&& a)
{
    a++;
    std::cout << a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

并执行:

test(0);
Run Code Online (Sandbox Code Playgroud)

为什么输出1?因为我认为0是右值,它无法改变.

Bri*_*ian 5

如果将非类非数组prvalue(例如数字文本)绑定到引用,则引用实际上将绑定到临时变量,该临时变量是原始值的副本.那是,

int&& a = 0;
Run Code Online (Sandbox Code Playgroud)

创建一个int值为零的临时对象,然后绑定a到该对象.

当您调用时test(0),适用相同的规则,并且引用参数绑定到临时参数; 临时增加,你得到结果1.当然你不是递增0本身.