
关于c++中复制构造函数参数必须加const出现的问题?
我最近在学C++的复制构造函数碰巧遇上了一个问题。如图一所示,我写了一个显式的构造语句,声明了一个as2的类对象。在我将复制构造函数声明为const**stringsba...
我最近在学C++的复制构造函数碰巧遇上了一个问题。如图一所示,我写了一个显式的构造语句,声明了一个as2的类对象。在我将复制构造函数声明为const**stringsbad(const stringsbad& st)**的时候不会出现问题,但是当我的复制构造函数没有const——stringbad(stringsbad& st),就会报错。而图二里,当我将复制构造函数加上const之后,as2就能通过。这里我想不通为什么,因为这句显式的构造语句和构造函数有关,和复制构造函数应该无关,为什么复制构造函数有没有const会影响到该构造函数语句?(图三为我加了const的复制构造函数。)
展开
1个回答
展开全部
因为你的图1创建了一个临时对象来调用复制构造函数,临时对象是一个右值。
而复制构造函数的参数如果不加const就是一个非常量左值引用(加了就是常量左值引用,可以引用右值),非常量左值引用不能引用右值,所以报错。
如下图1因为复制构造函数没有引用临时对象,所以可以不加const。
图1
如下图2的复制构造函数要引用临时对象,因为没加const所以报错。
图2
追问
非常感谢!这证实了我的想法,原来显式的构造函数是一个构造临时变量再复制变量到新声明的对象的过程。看来还得学仔细点。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询