将非常量左值引用绑定到右值

时间:2016-04-01 06:47:50

标签: c++

#include <iostream>
using namespace std;

int main() {
    int &&rfint = 10;
    int &l = rfint;
    std::cout << l << std::endl;
    std::cout << ++l << std::endl;
    std::cout << &l << std::endl;
    return 0;
}

使用上面的构造,我可以通过非const左值引用10直接操作prvalue l。我甚至可以接受prvalue的地址。这是如何运作的?它与extended lifetime相关吗?

1 个答案:

答案 0 :(得分:3)

[dcl.init.ref] / 5:

  

对类型“ cv1 T1”的引用由“ cv2 T2”类型的表达式初始化,如下所示:
  ...
  (5.2.2.2) - 如果T1是非类类型,则创建“ cv1 T1”类型的临时类并进行复制初始化(8.5)   来自初始化表达式。然后将引用绑定到临时。

所以int &&rfint = 10;创建一个临时的,引用绑定到它,而不是10本身。

是的,该临时的生命周期延长到rfint的生命周期,因此当rfint在范围内时,您可以随意执行任何操作。