像这样的fnc会延长返回物体的寿命吗?如果不是,有没有办法做到这一点?延长物体寿命
const int& f() //<<----Here you see, I'm returning by ref to const int
{
return 1;
}
像这样的fnc会延长返回物体的寿命吗?如果不是,有没有办法做到这一点?延长物体寿命
const int& f() //<<----Here you see, I'm returning by ref to const int
{
return 1;
}
不,它不会延长对象的生命周期。
不能延长临时的寿命(临时被结合参考创建),但是,你可以简单地做
int f() { return 1; }
:-)
干杯&心连心。 ,
- 阿尔夫
我不认为这将编译(一定),但如果你得到类似的东西编译就会失败运行具有未定义的行为。
它会而不是延长任何生命周期,所以你正在返回一个ref不再存在的var/const。
它必须按语言规则编译。它们并不例外,它是一个函数结果引用的绑定(尽管一个好的编译器可能会发出警告)。但是,对第二段来说。 :-) – 2010-10-12 19:06:53
@Alf:是的,我误解了'const'。 – 2010-10-12 19:12:33
你可以通过将结果赋给一个const引用来扩展它:如果你像const int&cref = f()那样调用这个函数,那么1的生命周期将延长到cref的生命周期。 – flownt 2010-10-12 19:07:35
@flownt:对不起,接下来发生的事情是,从正式的POV中为不确定的值创建新的引用。在实践中,这将是最初的'int'(它实际上还没有时间被混淆)。然而,如果你试图用一个具有析构函数的类型的对象来欺骗你,那么你可能会遇到一个令人讨厌的惊喜...... – 2010-10-12 19:12:11
我不确定标准实际上是否需要它,但是由于RVO,没有理由删除过早,因此gcc不会 – flownt 2010-10-18 22:14:45