为什么拷贝构造函数的参数一定是引用类型

 我来答
8826055
2015-11-06 · TA获得超过7510个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:888万
展开全部
从语言规范的角度来说,这只是一种规定而已。
C++标准12.8第2段提到:
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments.
翻译过来就是:
如果类X的一个非模板构造函数的第一个参数的类型是 X&,const X&,volatile X& 或 const volatile X& 中的一个,而且这个构造函数要么没有其他参数,要么其他参数都有默认值,那么这个构造函数就是拷贝构造函数。
这是人为的规定。

从逻辑的角度来说,因为从参数的传递本身就是拷贝。如果不使用引用类型,拷贝构造函数传递参数时又会调用拷贝构造函数,造成循环调用。
鹅胰
2013-11-08 · TA获得超过268个赞
知道答主
回答量:148
采纳率:66%
帮助的人:69.2万
展开全部
在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不好还好,我有理性这个好品质。思索一下以后,发现这个答案是不对的。让我来撕开(有点暴力,但是我喜欢,嘿嘿--龇牙)那件隐藏在真理外的小裤衩,让它袒露在“登徒子”们的眼前吧。 先从一个小例子开始:(自己测试一下自己看看这个程序的输出是什么?) view plaincopy to clipboardprint?#include class CExample { int m_nTest; public: CExample(int x):m_nTest(x) //带参数构造函数 { cout
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式