为什么我写的一个c++中类的复制构造函数的参数一定要加const??

#include<iostream>usingnamespacestd;classComplex{private:doublereal;doubleimage;publi... #include <iostream>

using namespace std;

class Complex
{
private:
double real;
double image;
public:
Complex(const double re,const double im):real(re),image(im){}
Complex(const Complex &c):real(c.real),image(c.image){}
Complex operator +(const Complex &c2);
};
Complex Complex::operator +(const Complex &c2)
{
Complex c(0,0);
c.real=real+c2.real;
c.image=image+c2.image;
return c;
//return Complex(real+c2.real,image+c2.image);
}
int main()
{
Complex c1(1,0);
Complex c2(0,1);
Complex c3=c1+c2;
return 0;
}
如果我的复制构造函数Complex(const Complex &c):real(c.real),image(c.image){}没有加const,程序就会报错说error: no matching function for call to ‘Complex ::Complex(Complex)’;虽然复制构造函数函数参数应该要加const,但没有强制性要求啊,为什么编译器会报错,而且还是报 没有匹配的函数??
展开
 我来答
爱的滋润year
2016-04-07
知道答主
回答量:45
采纳率:0%
帮助的人:9.5万
展开全部
当程序员正确工作时, 不论加不加const,都不会也不应该同时修改被拷贝的对象。
但若是不加const, 程序员是可以修改被拷贝的对象的,因此为了防止程序员犯错误,就要加上这个限制。

  它和另一个设计思想在思路上有共通之处:
        可以私有化的数据和函数,就一定要私有化。
L22yyyyyyyyyyy
2016-04-15
知道答主
回答量:7
采纳率:0%
帮助的人:9.6万
展开全部
当程序员正确工作时, 不论加不加const,都不会也不应该同时修改被拷贝的对象。
但若是不加const, 程序员是可以修改被拷贝的对象的,因此为了防止程序员犯错误,就要加上这个限制。它和另一个设计思想在思路上有共通之处:可以私有化的数据和函数,就一定要私有化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2014-09-06 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1228万
展开全部
语句Complex c3 = c1 + c2;中的c1 + c2的结果是一个临时变量(右值),在C++03中,只有const引用才能够引用右值。

所以加上const限定符有以下好处:既可以从const和非const左值复制构造,也可以从const和非const右值复制构造。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何家老六
2016-03-31
知道答主
回答量:7
采纳率:0%
帮助的人:7869
展开全部
因为声明的构造方法已经存在,所以复制构造函数只能为只读,所以必须加cunst.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式