看到最近有人问复制控制的问题,我也来说两句
说明——以下内容均来自我的C++学习笔记--------------------------------------
先来说一下复制控制之复制复制构造函数:
1、概念:复制构造函数是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。
2、定义:只有单个形参,而且该形参是对该类类型对象的引用(常用const修饰),这样的构造函数称为复制构造函数。
3、理解:
(1)、复制构造函数是一个构造函数。
(2)、只有单个形参,该形参是对本类类型对象的引用。
(3)、形参常用const修饰。
4、作用:
(1)、根据另一个同类型的对象显式或隐式初始化一个对象。
(2)、复制一个对象,将它作为实参传给一个函数。
(3)、从函数返回时复制一个对象。
(4)、初始化顺序容器的中元素。
(5)、根据元素初始化列表初始化数组元素。(数组初始化列表)
5、对于类类型对象:直接初始化与复制初始化的区别
(1)、直接初始化直接调用与实参匹配的构造函数。
(2)、复制初始化总是调用复制构造函数。
(一)、深入剖析类类型对象的复制初始化
复制初始化首先使用指定的构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象。
(1)、知识点回顾——临时对象:在求解表达式时,如果需要一个地方储存其运行结果,编译器会创建一个没有命名的对象,这就是临时对象。在英语中,C++程序员通常用temporary这个术语来代替temporary object。
例如:string s = "hello ,C++";
(2)剖析:①编译器首先调用接受一个C风格字符串形参的string构造函数,创建一个临时对象。
②编译器使用string复制构造函数将s初始化为那个临时对象的副本。