为什么重载+号的函数不能声明为const

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:57:57
RT,书上说operator+ 不能是const,因为他修改了调用他时针对的对象,但是,我没有发现他修改了成员变量啊?他修改了什么?为什么不能声明为const的?
呃,他说的就是双目运算符的那个+,而且我看过代码,就是普通的重载+,里面没有改变成员变量,最多就是创建了一个临时对象用来储存和值返回,修改这个无所谓的吧,而且他特别提出了不能声明const,所以我才很抑或的,我看的就是那个美国Liberty编写的教程

可以吧,operator+=就不可以,书上也有错的地方,如果有疑问最好就是自己写个程序测试一下。
#include <iostream>
using namespace std;

class Complex
{
public:
Complex(double r = 0.0, double i = 0.0) : real(r), img(i) {}
Complex operator + (Complex &o) const
{
return Complex(this->real + o.real, this->img + o.img);
}
private:
double real, img;
};

void main()
{
Complex c1, c2(3, 6), c3(8, 4);
c1 = c2 + c3;
}

+运算符有两个
书上说operator+不能是const, 讲的是取正值 这个+ 很明显 它不能是const 返回引用
两数相加的这个operator+ 可以是const 而且通常情况下是const 它不能返回引用 按值返回 要有返回值优化

没修改的话就可以用const,估计书上的那个函数是在调用者本身上加了其他数

const声明的变量 一旦赋值,就不能在修改,学C的时候就是这样的