我可以从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`
答案 0 :(得分:1)
只要在控制离开函数之前没有销毁所引用的对象,就可以返回引用(即,自动局部变量或参数,或临时创建的内部)功能)。
在这种情况下,您可能会在调用上下文中返回对临时Foo()
的引用,这很好,因为该临时保证可以存活到完全结束 - 包含调用的表达式。但是,在完整表达式即之后,引用将变为悬空,Foo()
临时值的生命周期未延长,因此必须注意不要在该点之后再次访问它。