C ++ const左值引用
假设我有:
A类不可复制
作为成员的B级,const A& a(并在其构造函数中获取A并将其设置在其初始化列表中)
功能
A GenerateA();
这是否意味着它应该是有效的:
B(GenerateA())
?
即,const ref是否表示没有生成A()返回的A的副本?这是否意味着只要B存在,返回的临时范围就会延长?
编辑:评论中的插件问题:
返回A& A是否可以接受从GenerateA()到本地A,如果左值是const A&?
谢谢!
没有找到相关结果
已邀请:
4 个回复
亨尖玛次酥
不可复制,则
无法编译。 关于const ref:no,临时的生命周期不会延长到B的生命周期。标准[12.2.5]规定: 绑定到构造函数的ctor-initializer(12.6.2)中的引用成员的临时绑定将持续存在,直到构造函数退出。 [...]函数返回语句(6.6.3)中返回值的临时绑定将持续存在,直到函数退出。 所以,是的,临时的生命周期的扩展存在于某些情境中(并且有时非常有用:请参阅本文),但不是在您提供的那个中。 关于你的上一个问题,从
返回对局部变量的引用是不合法的(并且将结果绑定到const引用将没有任何帮助)。
粟痢凰副
是不可复制的,则函数
无效,因为按值返回需要创建副本。 如果函数返回一个引用(即
)并且引用是本地创建的
对象,则一旦函数退出它就会变为无效。 C ++没有任何形式的垃圾收集,因此只要它在使用中就无法“延长”对象的生命周期。
痰降锭骂奸
羔磺
输出: