gpt4 book ai didi

c++ - 为什么我应该按值返回一些东西,因为 C++ 具有 const 引用?

转载 作者:IT老高 更新时间:2023-10-28 21:55:04 25 4
gpt4 key购买 nike

考虑这个函数:

Thing func(){
return something;
}

每次调用此函数时,都会生成一个 something 的拷贝并将其传递给调用者。

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

const Thing& func(){
return something;
}

这样,我们就不会冒着复制 something 的风险而没有理由这样做。如果客户端只需要从 something 中“读取”,而不是“写入”,则 const 引用可以做到这一点。如果客户端确实需要一个拷贝,它可以简单地将 const 引用分配给一个变量,例如:

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

那么有没有理由简单地按值返回?

顺便说一句,我并不是那么在意优化,只是我看不出有理由简单地按值(value)返回。


跟进问题:阅读答案后,我了解每种方法各有利弊。有默认吗?例如。 “默认按值返回”?还是纯粹根据具体情况?

最佳答案

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

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

说“通过引用而不是通过值返回总是更好”是没有意义的,每个使用一个的情况都必须单独考虑。

关于c++ - 为什么我应该按值返回一些东西,因为 C++ 具有 const 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com