在重载一个类的运算符的时候,什么情况下需要const那?我看了c++宝典,好像有的时候有,有的时候没有,大侠们给电见解

解决方案 »

  1.   

    如果在一个类里面需要修改参数的值就不要加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 ,当然+=还可以以成员函数的方式重载的,这里就不再写了。
      

  2.   

    那么CTest operator+(const CTest &first, const CTest &second) const
    最后那个const是什么意思?
      

  3.   

    全部都不要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会导致无法实现。