拷贝构造函数为什么不能用值传递
来源:互联网 发布:dp901单片机说明书 编辑:程序博客网 时间:2024/05/29 04:59
原文地址:http://www.cppblog.com/cxiaojia/archive/2011/11/22/cpp1.html
当你尝试着把拷贝构造函数写成值传递的时候,会发现编译都通不过,错误信息如下:
error: invalid constructor; you probably meant 'S (const S&)' (大致意思是:无效的构造函数,你应该写成。。。)
当编译错误的时候你就开始纠结了,为什么拷贝构造函数一定要使用引用传递呢,我上网查找了许多资料,大家的意思基本上都是说如果用值传递的话可能会产生死循环。编译器可能基于这样的原因不允许出现值传递的拷贝构造函数,也有可能是C++标准是这样规定的。
如果真是产生死循环这个原因的话,应该是这样子的:
#include<iostream>
using namespace std;
class S
{
int a;
public:
S(int x):a(x){}
S(const S st){this->a=st.a;}//拷贝构造函数
};
int main()
{
S s1(2);
S s2(s1);
return 0;
}
也就是说,只要调用拷贝构造函数,就会重新申请一段空间,只要重新申请一段空间,就会调用拷贝构造函数,这样一直下去就形成了一个死循环。
所以拷贝构造函数一定不能是值传递。
阅读全文
0 0
- 拷贝构造函数为什么不能用值传递
- 为什么C++中的拷贝构造函数参数不能值传递
- 为什么拷贝构造函数必须是引用传递,而不能是值传递
- 为什么拷贝构造函数必须为引用传递,不能是值传递?
- 为什么拷贝构造函数必须为引用传递,不能是值传递?
- 为什么拷贝构造函数必须为引用传递,不能是值传递?
- 为什么拷贝构造函数必须为引用传递,不能是值传递?
- 拷贝构造函数 参数传递 返回值
- 为什么需要拷贝构造函数
- 为什么需要拷贝构造函数
- JAVA一个类有两个构造函数,当在一个构造函数中调用另外一个构造函数时为什么要用this.()而不能用类名.()
- 编译器自动优化——为什么我的C++编译器不调用拷贝构造函数了?
- 为什么需要拷贝(复制)构造函数
- 浅谈为什么拷贝构造函数传引用
- 拷贝构造函数为什么使用引用类型
- 挎贝构造函数为什么只能用引用
- 为什么不能用iDescription?
- release为什么不能用
- 一分钟了解“我的领域对应的一区SCI期刊”
- JavaScript的面向对象
- HDU 4578 Transformation (线段树)
- Java 包装类初识
- 字典
- 拷贝构造函数为什么不能用值传递
- iOS 【一篇文章引发的思考 —— 异步/同步/并发/串行】
- Qt 根据Label大小无形变的自适应居中显示图像
- mybatis-config.xml:报SAXParseException: The content of element type "configuration" must match
- 分治法--快速排序
- Java+Selenium3方法篇26-处理Alert弹窗
- containsKey方法——判断是否包含指定的键名
- [搬萝卜 & 取水果]
- 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl