返回对const引用参数的const引用

时间:2016-05-03 00:05:33

标签: c++

我可以从C ++中的函数返回一个const引用参数吗?即,此代码是否导致未定义的行为?

template<typename T>
class Option {
public:
    ...

    const T & getOrElse(const T &x) const
    {
        return val == nullptr ? x : *val;
    }

private:
    T *val = nullptr;
}

Option<Foo> foo;
foo.getOrElse(Foo());  // <- using a temporary `Foo`

1 个答案:

答案 0 :(得分:1)

只要在控制离开函数之前没有销毁所引用的对象,就可以返回引用(,自动局部变量或参数,或临时创建的内部)功能)。

在这种情况下,您可能会在调用上下文中返回对临时Foo()的引用,这很好,因为该临时保证可以存活到完全结束 - 包含调用的表达式。但是,在完整表达式之后,引用将变为悬空,Foo()临时值的生命周期未延长,因此必须注意不要在该点之后再次访问它。