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
所做的更改实际上是 到 var2
到var1
).
关于生命周期延长,这适用于 将右值绑定到 const&
。 var1
是一个左值,它的生命周期固定在它的范围内。
对于第二个示例,您不能 return 对局部变量的引用(甚至 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
所做的更改实际上是 到 var2
到var1
).
关于生命周期延长,这适用于 将右值绑定到 const&
。 var1
是一个左值,它的生命周期固定在它的范围内。
对于第二个示例,您不能 return 对局部变量的引用(甚至 const
)。别名不会改变这一点。调用者将得到的只是一个悬挂引用。