C ++:使用const的引用和生命周期扩展

时间:2016-02-28 18:04:19

标签: c++ reference const copy-constructor object-lifetime

这是指C ++编程语言。假设我们有一个类C并执行此操作:

C var1 = C(init_parameters);

C& var2(var1); 

问题1: 如果我们更改 var2 ,例如var2.memberA = 3,这是否会影响var1?或者我们是否创建了一个新对象,以便var2没有引用var1

问题2: 假设我们有这样的函数:

const C& f(C var1) {
  const C& tmp(var1);
  return tmp;
}

我们现在可以调用上面的函数,例如value = f(var1)并获得有效的参考value?原则上,返回引用超出了范围,但const是否延长了生命周期?如果var1被修改或删除会发生什么情况,这是否会影响常量引用value?换句话说,为了清楚起见,我可以使用变量value,就好像它是var1的副本一样吗?

1 个答案:

答案 0 :(得分:2)

C& var2(var1);const C& tmp(var1);不会调用任何特殊的成员函数。您为引用的对象/变量声明references - 别名(是的,对var2所做的更改实际上是通过 var2到{{1 }})。

关于终身延期,适用于将rvalues绑定到var1 const&是一个左值,其生命周期固定在其范围内。

对于第二个示例,您无法将引用(甚至var1)返回到局部变量。别名不会改变它。呼叫者将获得的所有内容都是悬挂参考。