概述
1 为什么是引用?
举例
CBox(CBox initB);//复制构造函数一开始想到的原型
CBox cigar;
CBox myBox(cigar); //如果编写这样一条语句
//那么将生成这样一条对复制构造函数的调用CBox::CBox(cigar);
因为实参是通过按值传递机制传递的。在可以传递对象cigar之前,编译器需要安排创建该对象的副本。因此,编译器为了处理复制构造函数的这条调用语句,需要调用复制构造函数来创建实参的副本。但是,由于是按值传递,第二次调用同样需要创建实参的副本,因此还得调用复制构造函数,就这样持续不休。最终得到的是对复制构造函数的无穷调用。(其实就是创建副本也是需要调用复制构造函数的)
所以解决办法先是要将形参改为引用形参:
CBox (CBox &initB);
2 为什么是const?
如果不去改变实参的值的话,不加const的效果和加const的效果是一样的,而且不加const编译器也不会报错,因为函数的形参是引用,则调用函数时不需要复制实参,函数是直接访问调用函数中的实参变量的。但是为了整个程序的安全,还是加上const,防止对实参的意外修改~所以这里再将复制构造函数原型改为以下这种形式:
CBox (const CBox &initB);
参考
C++——复制构造函数的形参为什么要是const引用blog.csdn.net最后
以上就是真实皮皮虾为你收集整理的c++ 函数返回const引用_C++复制构造函数的形参为什么是const引用的全部内容,希望文章能够帮你解决c++ 函数返回const引用_C++复制构造函数的形参为什么是const引用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复