为了账号安全,请及时绑定邮箱和手机立即绑定

通过const值返回的目的?

通过const值返回的目的?

C++
MMTTMM 2019-08-12 16:16:45
通过const值返回的目的?const的目的是什么?const Object myFunc(){     return myObject;}我刚刚开始阅读Effective C ++,而第3项提倡这一点,Google搜索也提出了类似的建议,但也有反作用。我看不出在这里使用const会更好。假设需要按值返回,我认为没有任何理由保护返回的值。给出为什么这可能有用的示例是防止返回值的意外bool强制转换。实际问题是应该使用explicit关键字来防止隐式bool强制转换。在这里使用const可以防止在没有赋值的情 所以我无法用这些对象执行算术表达式。似乎没有一个未命名的const有用的情况。在这里使用const可以获得什么,何时更可取?编辑:将算术示例更改为修改在分配之前可能要执行的对象的任何函数。
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

在假设的情况下,您可以对对象执行可能昂贵的非const操作,通过const-value返回可以防止您意外地在临时上调用此操作。想象一下,+返回一个非const值,你可以写:

(a + b).expensive();

然而,在C ++ 11时代,强烈建议将值返回为非const,以便您可以充分利用rvalue引用,这仅对非常量rvalues有意义。

总之,就是这种做法的理由,但它本质上是过时的。


查看完整回答
反对 回复 2019-08-12
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

从函数返回一个值是没有意义的const

要让它对您的代码产生任何影响是很困难的

const int foo() {
   return 3;}int main() {
   int x = foo();  // copies happily
   x = 4;}

并且

const int foo() {
   return 3;}int main() {
   foo() = 4;  // not valid anyway for built-in types}// error: lvalue required as left operand of assignment

虽然您可以注意到返回类型是否是用户定义的类型

struct T {};const T foo() {
   return T();}int main() {
   foo() = T();}// error: passing ‘const T’ as ‘this’ argument of ‘T& T::operator=(const T&)’ discards qualifiers

这是否对任何人都有好处值得怀疑。

返回引用是不同的,但除非Object是某些模板参数,否则您不会这样做。


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 453 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信