关于c++中复制构造函数参数必须加const出现的问题?

我最近在学C++的复制构造函数碰巧遇上了一个问题。如图一所示,我写了一个显式的构造语句,声明了一个as2的类对象。在我将复制构造函数声明为const**stringsba... 我最近在学C++的复制构造函数碰巧遇上了一个问题。如图一所示,我写了一个显式的构造语句,声明了一个as2的类对象。在我将复制构造函数声明为const**stringsbad(const stringsbad& st)**的时候不会出现问题,但是当我的复制构造函数没有const——stringbad(stringsbad& st),就会报错。而图二里,当我将复制构造函数加上const之后,as2就能通过。这里我想不通为什么,因为这句显式的构造语句和构造函数有关,和复制构造函数应该无关,为什么复制构造函数有没有const会影响到该构造函数语句?(图三为我加了const的复制构造函数。) 展开
 我来答
microroom
科技发烧友

2021-12-16 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1742万
展开全部

因为你的图1创建了一个临时对象来调用复制构造函数,临时对象是一个右值。

而复制构造函数的参数如果不加const就是一个非常量左值引用(加了就是常量左值引用,可以引用右值),非常量左值引用不能引用右值,所以报错。

如下图1因为复制构造函数没有引用临时对象,所以可以不加const。

图1

如下图2的复制构造函数要引用临时对象,因为没加const所以报错。

图2

追问
非常感谢!这证实了我的想法,原来显式的构造函数是一个构造临时变量再复制变量到新声明的对象的过程。看来还得学仔细点。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式