方法的C ++参考变量

时间:2020-02-04 15:06:22

标签: c++ reference

这样做有意义吗?

class SomeClass
{
public:
    static Object getObject()
    {
        return Object("example")
    }
};

int main()
{
    const Object& myObject = SomeClass::getObject();

    // do something with myObject
}

或者与获得对象一样

const Object myObject = SomeClass::getObject();

2 个答案:

答案 0 :(得分:6)

根据赫伯·萨特(Herb Sutter)在该主题上的文章here,两种情况都是正确的:

通常,临时对象仅持续到完整对象的结尾 出现在其中的表达式。但是,C ++故意指定 将临时对象绑定到堆栈上const的引用 将临时文件的寿命延长到 引用自身,从而避免了其他常见情况 悬挂参考错误。

但是,如果您从案例1中删除const,那将是不对的。

答案 1 :(得分:0)

使用NRVO时,两者之间存在细微差别。

命名的返回值优化只能与局部变量一起使用。参考不是:

auto foo() -> Object
{
    const Object& myObject = SomeClass::getObject();
    return myObject; // no NRVO in this case
}

auto foo() -> Object
{
    const Object myObject = SomeClass::getObject();
    return myObject; // NRVO applies in this case
}

Live example