C++ const左值引用

ple*_* me 9 c++ const reference noncopyable

假设我有:

  • A类不可复制
  • 作为成员的类B,const A&a(并在其构造函数中获取A并将其设置在其初始化列表中)
  • 一个功能 A GenerateA();

这是否意味着它应该有效:B(GenerateA())?

即,const ref是否意味着没有生成A()返回的A副本完成?这是否意味着只要B存在,返回的临时范围就会延长?

编辑:注释中的插件问题:如果左值为常数A&?,是否可以将A&从GenerateA()返回到本地A.

谢谢!

ice*_*ime 3

正如其他人已经指出的那样,如果不可复制A GenerateA(),则无法编译A

关于 const ref :不,临时的生命周期不会延长到 B 的生命周期。标准 [12.2.5] 规定:

构造函数构造函数初始化程序 (12.6.2) 中引用成员的临时绑定将持续存在,直到构造函数退出。[...] 函数返回语句 (6.6.3) 中返回值的临时绑定一直持续到函数退出为止。

所以,是的,在某些情况下存在临时生命周期的延长(有时确实有用:请参阅这篇文章),但在您介绍的情况下则不然。

关于你的最后一个问题,返回对局部变量的引用是不合法的GenerateA()(并且将结果绑定到 const 引用不会有任何帮助)。