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);

测试程序:

#include<iostream>
using namespace std;  class Test
{
public:  Test(const Test &t) { //如果这里为Test(t);则会报错/*使用t来拷贝数据成员*/ }  Test() {/*初始化数据成员*/ }
};  Test fun()
{  cout << "fun() Called\n";  Test t;  return t;
}  int main()
{  Test t1;  Test t2 = fun();  return 0;
}  

C++——复制构造函数的形参为什么要是const引用相关推荐

  1. C++中拷贝构造函数的形参为什么要是const引用

    1.首先为什么要是引用: 如对于 CBox(CBox initB);//复制构造函数一开始想到的原型 CBox cigar; CBox myBox(cigar); //如果编写这样一条语句 //那么将 ...

  2. 拷贝构造函数c语言,C++拷贝构造函数(复制构造函数)详解

    复制构造函数是构造函数的一种,也称拷贝构造函数,它只有一个参数,参数类型是本类的引用. 复制构造函数的参数可以是 const 引用,也可以是非 const 引用. 一般使用前者,这样既能以常量对象(初 ...

  3. C++拷贝构造函数(复制构造函数)详解

    link 复制构造函数是构造函数的一种,也称拷贝构造函数,它只有一个参数,参数类型是本类的引用. 如果类的设计者不写复制构造函数,编译器就会自动生成复制构造函数.大多数情况下,其作用是实现从源对象到目 ...

  4. c++ 复制构造函数_C++学习刷题8--复制构造函数和赋值运算符重载函数

    一.前言 本部分为C++语言刷题系列中的第8节,主要讲解这几个知识点:复制构造函数和赋值运算符重载函数.欢迎大家提出意见.指出错误或提供更好的题目! 二.知识点讲解 知识点1:复制构造函数 1.当依据 ...

  5. 6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数

    1 继承基类的构造函数 class A{public:A(){}; // A的构造函数 }; class B : public A{public:using A:A: } 2 单继承的构造函数 cla ...

  6. C++再议构造函数及复制构造函数深度复制

    1.一般构造函数 如果没有提供任何构造函数,创建一个什么都不做的构造函数 如: test::test() {} 如果希望编译器不使用这种默认的构造函数 可以自己定义默认构造函数 test::test( ...

  7. C++——构造函数、析构函数以及复制构造函数

    文章目录 一.构造函数 1.1 构造函数是什么? 1.2 为什么要有构造函数? 1.3 如何使用构造函数? 1.4 构造函数的实现 二.复制构造函数 2.1 什么是复制构造函数? 2.2 为什么要有复 ...

  8. 语言const的生命周期_如何理解一门编程语言2——以复制构造函数为例

    前些天我发布了一篇文章<如何理解一门编程语言>,文中我以C++中的const为例,给大家分享了如何通过修饰词的修饰对象来理解编程语言中晦涩难记的语法. 如果把 const 作为一个形容词来 ...

  9. 复制构造函数(拷贝构造函数)

    也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生.对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什 ...

最新文章

  1. ORB-SLAM2从理论到代码实现(八):Tracking.cc程序详解(下)
  2. 使用amaze ui的分页样式封装一个通用的JS分页控件
  3. 非聚集索引和聚集索引
  4. 设计模式之动态代理的代码实现(Java)
  5. 65.4. Other GUI - phpOraAdmin
  6. Mac编译OpenJDK8:configure: error: Xcode 4 is required to build JDK 8, the version found was 10.1config
  7. python函数参数用法_Python:函数参数类型及其用法
  8. Code Combat 适合初中生、高中生 学习代码的游戏
  9. 长尾问题 数据不平衡 学习笔记
  10. html五子棋游戏(附源码)
  11. 还不知道 XR、AR、VR、MR 有什么不同?
  12. Gos —— 搭建基础环境
  13. html标签图片填充背景色快捷键,ps中填充颜色的快捷键是什么?
  14. 使用FFmpeg将一张图片和一段音频转换成视频
  15. FBX 解析 材质与贴图
  16. [Python] 一元线性回归分析实例
  17. 旷世开源yolox的目标检测使用
  18. android期末课设选题_基于本科计算机安卓android毕业设计选题题目
  19. 何谓-全无线UWB定位系统
  20. 没密码?巧用工具帮你破解压缩包文件

热门文章

  1. mocha 测试 mysql_GitHub - zouzhenxing/lei: 整合Express mysql ioredis ejs 的一开发框架,使用mocha对api进行测试...
  2. print_w php,THINKPHP的dump打印数组函数,输出在浏览器非常友好。
  3. python语言的特点有没有面向过程_Python 入门基础之面向对象过程-面向过程概述...
  4. new操作符的作用是什么
  5. java对数据库的操作_java对数据库的操作(jdbc)
  6. har文件解析工具_嵌入式MCU也能跑AI?STM32 Cube.AI工具包使用初探
  7. 百度统计:网站统计实时访客报告
  8. 资源:gif动画截取、制作软件
  9. js - 让 git 上 Mint-UI 的例子跑起来 - 方法大全
  10. javascript 性能 · 平稳退化、渐进增强