这段代码应该做什么?(参考右值)

What's this code supposed to do? (reference to rvalue)

本文关键字:什么 参考 段代码 代码      更新时间:2023-10-16

我读到下面的代码在c++ 11中是有效的:

int && a = 3;
a = 4;

是否应该在存储数字字面值3的内存地址中写入4 ?也许一些编译器优化会防止这种情况发生,但它应该这样做吗?

当将非类类型的右值赋值给右值引用时,将创建一个临时对象,并将引用绑定到该对象。您只是在修改临时对象。

对类型"cv1 T1"的引用由类型"cv2 T2"的表达式初始化,如下所示:

  • 如果引用是左值引用[…]

  • 否则,[…]或引用必须是右值引用

    • 如果初始化表达式

      • 是一个xvalue(但不是位域),类的右值,数组的右值或函数的左值[…]),或者

      • 有一个类类型[…]

      […]

    • 否则,将创建一个类型为" cv1 T1 "的临时对象,并使用非引用复制初始化的规则从初始化表达式初始化。然后将引用绑定到临时对象。

从概念上讲,右值只是一个可能来自或不来自内存中的某个对象的值。字面量在内存中没有对应的对象,因此该规则强制创建一个对象。