2016-02-28 202 views
-1

这是指C++编程语言。假设我们有一个类C和做到这一点:C++:使用const的引用和生命周期扩展

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

“这里我们称复制构造函数”不是真的。 'var2'是一个参考。 – juanchopanza

+0

您可以解释一下,我会纠正我的陈述吗? – Mannaggia

+0

“'var2'是对'var1'的引用”将是准确的。 – juanchopanza

回答

2

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

关于寿命延长,适用于绑定右值到const&var1是一个左值,其寿命固定在其范围内。

对于第二个示例,无法将参考(甚至到const)返回到局部变量。别名不会改变这一点。调用者将得到的所有内容都是一个悬而未决的参考。

+0

可以通过将rvalues绑定到const&?来进行延长寿命的例子吗? Thx – Mannaggia

+1

@Mannaggia [This](http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/)。 – LogicStuff