这是指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
的副本一样吗?
答案 0 :(得分:2)
C& var2(var1);
和const C& tmp(var1);
不会调用任何特殊的成员函数。您为引用的对象/变量声明references - 别名(是的,对var2
所做的更改实际上是通过 var2
到{{1 }})。
关于终身延期,适用于将rvalues绑定到var1
。 const&
是一个左值,其生命周期固定在其范围内。
对于第二个示例,您无法将引用(甚至var1
)返回到局部变量。别名不会改变它。呼叫者将获得的所有内容都是悬挂参考。