按赋给const引用的值返回

return by value assigned to const reference

本文关键字:返回 引用 const      更新时间:2023-10-16

我正在修复一些代码中的另一个bug,并且遇到了一些我认为是bug的代码;然而,这段代码可以在GCC 4.4、4.5和4.6下编译,并且看起来像"预期的"那样运行。有人能告诉我这是有效的c++吗?

struct foo {
     int bar;
};
foo myfunction(foo const &orig) {
    foo fooOnStack = orig;
    fooOnStack.bar *= 100;
    return fooOnStack;
}
void myOtherFunction(foo const &orig) {
    foo const &retFoo = myfunction();
    // perhaps do some tests on retFoo.bar ...
}

如果这是有效的c++,有人知道这是合法的背后的理由吗?

是的,这是合法的c++。形成对const的引用,将临时对象的生命周期延长到引用的生命周期。

我认为你仍然需要小心。我有一个案例,c++ -4.9与c++ 11和复杂的特征类型不尊重这一点(它删除数据在返回的临时,即使它的生命周期应该延长)。因此,即使它可能是合法的,也应该被标记为危险的,除非有一个真正好的理由。

而且,c++ 11如果按值返回,必须在调用点分配临时值,如果使用最新的标准,它的有用性可能不如以前。