赋值运算符中返回值带const和不带const对象中有什么区别?
重载赋值运算符时
1- const intlong &operator=(const intlong&)
2- intlong &operator=(const intlong&)
我开始以为第1个带const表示返回值不能被修改,只能做为常量返回,但测试时发现和第2个是一样,可以用于连续赋值
比如
intlong a(5);
intlong b(0);
intlong c(6);
a=b=c;
----那第1种返回值为const和第2种返回值不带const有什么区别?
还有
3- intlong &operator=(const intlong&)const;
4- intlong operator=(const intlong&)const;
这两种定义为const重载赋值运算符有什么作用?
----不能修改内部this成员这种赋值怎么改变左边值?,是不是说重载赋值运算符除了1和2有意义,3和4没意义
#include <iostream>
using namespace std;
class intlong{
friend ostream &operator<<(ostream&,const intlong&);
public:
intlong(int);
intlong(const intlong&);
intlong operator+(const intlong&)const;
const intlong &operator=(const intlong&); //前面加const
//intlong &operator=(const intlong&); //前面无const 无cons和有const怎么不能同时定义类中
private:
int p;
};
const intlong &intlong::operator=(const intlong& rhs){
this->p=rhs.p;
return *this;
}
/*
intlong &intlong::operator=(const intlong& rhs){
this->p=rhs.p;
return *this;
}*/
ostream &operator<<(ostream &cout,const intlong &rhs){
cout<<rhs.p<<endl;
return cout;
}
intlong::intlong(int rhs):p(rhs){
}
intlong::intlong(const intlong &rhs){
this->p=rhs.p;
}
intlong intlong::operator+(const intlong &rhs)const{
intlong temp(0);
temp.p=(*this).p + rhs.p ;
return temp;
}
int main()
{
intlong a(5);
intlong b(6);
intlong c(7);
a=b=c;
cout<<a<<endl;
return 0;
}