2010-10-12 76 views
1

像这样的fnc会延长返回物体的寿命吗?如果不是,有没有办法做到这一点?延长物体寿命

const int& f() //<<----Here you see, I'm returning by ref to const int 
{ 
    return 1; 
} 

回答

2

不,它不会延长对象的生命周期。

不能延长临时的寿命(临时被结合参考创建),但是,你可以简单地做

int f() { return 1; } 

:-)

干杯&心连心。 ,

- 阿尔夫

+0

你可以通过将结果赋给一个const引用来扩展它:如果你像const int&cref = f()那样调用这个函数,那么1的生命周期将延长到cref的生命周期。 – flownt 2010-10-12 19:07:35

+0

@flownt:对不起,接下来发生的事情是,从正式的POV中为不确定的值创建新的引用。在实践中,这将是最初的'int'(它实际上还没有时间被混淆)。然而,如果你试图用一个具有析构函数的类型的对象来欺骗你,那么你可能会遇到一个令人讨厌的惊喜...... – 2010-10-12 19:12:11

+0

我不确定标准实际上是否需要它,但是由于RVO,没有理由删除过早,因此gcc不会 – flownt 2010-10-18 22:14:45

2

我不认为这将编译(一定),但如果你得到类似的东西编译就会失败运行具有未定义的行为。

它会而不是延长任何生命周期,所以你正在返回一个ref不再存在的var/const。

+0

它必须按语言规则编译。它们并不例外,它是一个函数结果引用的绑定(尽管一个好的编译器可能会发出警告)。但是,对第二段来说。 :-) – 2010-10-12 19:06:53

+0

@Alf:是的,我误解了'const'。 – 2010-10-12 19:12:33