既然 C++ 具有 const 引用,为什么我应该按值返回某些内容?

2024-03-31

考虑这个函数:

Thing func(){
    return something;
}

每次调用此函数时,都会生成一个副本something被创建并传递给调用者。

我的问题是,为什么不这样做(every我想按值返回一些东西)?

const Thing& func(){
    return something;
}

这样,我们就不会冒复制的风险something无理由这样做。如果客户端只需要“读取”something,但不能“写入”它,const 引用可以做到这一点。如果客户端确实需要副本,它可以简单地将 const 引用分配给变量,例如:

Thing thing = func(); // the object is passed by const reference, and then copied.

那么是否有理由简单地按值返回呢?

顺便说一句,并不是我太关心优化,而是我不认为有理由简单地按值返回。


跟进问题:阅读答案,我明白每种方法都有优点和缺点。有默认的吗?例如。“默认按值返回”?还是纯粹根据具体情况而定?


因为如果您的对象(无论出于何种原因)是在被调用函数的堆栈上创建的,则返回和使用对其的引用是未定义的行为。

通过按值返回,编译器有时可以优化返回,并且不存在危险的悬空引用。借助 C++11 和移动语义,这被提升到了一个新的水平。

说“通过引用返回总是比通过值返回更好”不太有意义,每种使用情况都必须单独考虑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

既然 C++ 具有 const 引用,为什么我应该按值返回某些内容? 的相关文章

随机推荐