0

我已阅读以下代码在 C++11 中有效:

int && a = 3;
a = 4;

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

4

1 回答 1

7

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

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

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

  • 否则, [...] 或引用应为右值引用

    • 如果初始化表达式

      • 是一个 xvalue(但不是位域)、类纯右值、数组纯右值或函数左值 [...],或

      • 有一个类类型 [...]

      [...]

    • T1否则,将使用非引用复制初始化 (8.5) 的规则从初始化表达式创建并初始化“cv1”类型的临时变量。然后将引用绑定到临时文件。

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

于 2013-03-27T11:34:54.083 回答