关于重载运算符的const问题

smile_yuzhe 2002-10-05 01:41:28
在重载一个类的运算符的时候,什么情况下需要const那?我看了c++宝典,好像有的时候有,有的时候没有,大侠们给电见解
...全文
170 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_lau 2002-10-07
  • 打赏
  • 举报
回复
同意,关键就是起个防护作用
stonespace 2002-10-07
  • 打赏
  • 举报
回复
全部都不要const肯定没有问题。加上const只会对你写的代码加上额外的限制,如果不要const,什么限制都没有,结果还是一样的。不同的是,如果写的代码没有限制,容易犯错误。如果加上const写的代码有限制,即使犯错,编译器也可以提示出错信息。

比如:
CTest operator+(const CTest &first, const CTest &second) const

参数的两个const限制你在operator+的实现代码中,不能修改first、second的取值,事实上也不需要修改,如果修改了,多半都是错误。最后一个const限制你不能修改this指向的对象的取值,也就是不能修改自身的状态。

但是,如果写成这样
CTest & opeartor+=(const CTest &second) const
就无法实现,因为+=的运算不可能不修改自身,加上const会导致无法实现。
SeekTruth 2002-10-07
  • 打赏
  • 举报
回复
大概是表示本重载运算符不修改类中的成员值吧!
smile_yuzhe 2002-10-06
  • 打赏
  • 举报
回复
那么CTest operator+(const CTest &first, const CTest &second) const
最后那个const是什么意思?
luopeng 2002-10-05
  • 打赏
  • 举报
回复
如果在一个类里面需要修改参数的值就不要加const啊,不修改的就加上const
e.g. 一个类CTest,重载加号,那么会有如下的代码
CTest operator+(const CTest &first, const CTest &second)
这里因为两个加数都不会改变,所以要加上const,而另外一种情况
CTest opeartor+=(CTest &first, const CTest &second)
{
first = first + second;
}
这里因为要修改first的值,所以就不加constb ,当然+=还可以以成员函数的方式重载的,这里就不再写了。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧