对象返回类型的选择

对象返回类型的选择

这里的返回类型以Vector类对象为例
4种:对象引用,const对象引用,对象,const对象

  • Vector &
    返回对象的引用,不需要调用复制构造函数,返回引用效率更高
    修改返回值
    赋值运算符重载,<<运算符重载属于这一类
  • const Vector &
    不修改返回对象的值
  • Vector
    对于调用函数中的局部变量,则不应该按引用返回它,因为函数结束之后,局部变量就会被销毁,这时应该选择按值返回,调用复制构造函数,返回一个局部变量的副本,这时这种开销是无法避免的。
    被重载的算数运算符属于这一类
  • const Vector
    用于某些情况的错误
    例如 1. net= force1 + force2
    2. force1 + force2 = net
    在返回类型是对象的情况下都可以运行,但是2是有问题的,force1 + force2创建一个临时对象temp,语句1中temp将被复制到net,结果被保留下来,而在语句2中,结果将永远被net覆盖,而与temp的计算结果无关。
    为了避免这种错误的发生,可以让Vector::operator+()的返回类型设置为const Vector,这样拷贝的临时副本将是不可修改的,语句2将被禁用,而语句1可以正常使用,可以更好地避免可能引发的错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值