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