c++ - 返回对 const 引用参数的 const 引用

标签 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`

最佳答案

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

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

关于c++ - 返回对 const 引用参数的 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993526/

相关文章:

c++ - 如何加快 OpenCV 代码的实现速度

c++ - N3600 中的 `latch` 样本中是否存在竞争条件?

c++ - 给定不同大象的生命周期,找出最大数量的大象生活的时期

c++ - 我可以在这个类中用嵌套类填充模板参数吗?

c++ - 为什么折叠表达式不能出现在常量表达式中?

c++ - vector 值不按插入顺序

c++ - 使用 C++ CGI 脚本输入异常

c++ - 如何在 2D 游戏中处理游戏事件长度

c++ - 在 C++ 中通过 tcp/ip 协议(protocol)发送 .txt 文件

c++ - 计算二叉搜索树中的节点