拷贝构造函数的参数类型

为什么拷贝构造函数的参数类型必须是引用呢?先看如下代码
<pre>#include <iostream>
class Foo{
public:
Foo();
Foo(const Foo&); //拷贝构造函数
}</pre>如果参数不是引用类型,则调用永远不会成功,为什么?
我们先来看看什么情况下会发生拷贝初始化

<li><b>将一个对象作为实参传递给一个非引用类型的形参</b></li>
<li>将一个返回类型为非引用类型的函数返回一个对象</li>
<li>用花括号列表初始化一个数组中的元素或一个聚合类的成员</li>

注意第一条的内容,如果拷贝构造函数的参数类型不是引用那么执行调用的时候就永远不会成功,如下所示

<pre>Foo instance1;
Foo instance2 = instance1; //调用拷贝构造函数</pre>显然代码是想用拷贝初始化的方式给instance2赋值为instance1,这条语句实际上是等价于执行下面这条语句

<pre>Foo instance2(instance1); </pre>如果参数类型不是引用的话,那么调用这个函数(即拷贝构造函数)必须拷贝实参,但为了拷贝实参,我们又必须调用拷贝构造函数(因为将一个对象作为实参传递给一个非引用类型的形参时会发生拷贝初始化),如此无限循环,致使调用永远不会成功。

<pre>Foo(const Foo&); //拷贝构造函数,形参必须为引用类型
Foo(const Foo); //永远无法成功</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,146评论 1 51
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,356评论 9 118
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 7,928评论 0 3
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 10,437评论 0 14
  • 文丨林溪先生 图片丨Jerrywangqian,闭眼缄默 01 ▼ “自律”,听起来这个词让人很向往,人人都会说...
    林溪间阅读 3,907评论 0 0