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

C++: reference and lifetime extension using const

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

C var1 = C(init_parameters);

C& var2(var1); 

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

问题二: 假设我们有这样一个函数:

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

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

C& var2(var1);const C& tmp(var1); 不调用任何特殊的成员函数。您正在声明 references - 引用的 objects/variables 的别名(是的,对 var2 所做的更改实际上是 var2var1).

关于生命周期延长,这适用于 将右值绑定到 const&var1 是一个左值,它的生命周期固定在它的范围内。

对于第二个示例,您不能 return 对局部变量的引用(甚至 const)。别名不会改变这一点。调用者将得到的只是一个悬挂引用。