拷貝構造函數(shù)的參數(shù)類型

為什么拷貝構造函數(shù)的參數(shù)類型必須是引用呢?先看如下代碼
<pre>#include <iostream>
class Foo{
public:
Foo();
Foo(const Foo&); //拷貝構造函數(shù)
}</pre>如果參數(shù)不是引用類型,則調(diào)用永遠不會成功,為什么?
我們先來看看什么情況下會發(fā)生拷貝初始化

<li><b>將一個對象作為實參傳遞給一個非引用類型的形參</b></li>
<li>將一個返回類型為非引用類型的函數(shù)返回一個對象</li>
<li>用花括號列表初始化一個數(shù)組中的元素或一個聚合類的成員</li>

注意第一條的內(nèi)容,如果拷貝構造函數(shù)的參數(shù)類型不是引用那么執(zhí)行調(diào)用的時候就永遠不會成功,如下所示

<pre>Foo instance1;
Foo instance2 = instance1; //調(diào)用拷貝構造函數(shù)</pre>顯然代碼是想用拷貝初始化的方式給instance2賦值為instance1,這條語句實際上是等價于執(zhí)行下面這條語句

<pre>Foo instance2(instance1); </pre>如果參數(shù)類型不是引用的話,那么調(diào)用這個函數(shù)(即拷貝構造函數(shù))必須拷貝實參,但為了拷貝實參,我們又必須調(diào)用拷貝構造函數(shù)(因為將一個對象作為實參傳遞給一個非引用類型的形參時會發(fā)生拷貝初始化),如此無限循環(huán),致使調(diào)用永遠不會成功。

<pre>Foo(const Foo&); //拷貝構造函數(shù),形參必須為引用類型
Foo(const Foo); //永遠無法成功</pre>

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,689評論 1 51
  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,724評論 9 118
  • C++文件 例:從文件income. in中讀入收入直到文件結束,并將收入和稅金輸出到文件tax. out。 檢查...
    SeanC52111閱讀 3,112評論 0 3
  • 1.面向?qū)ο蟮某绦蛟O計思想是什么? 答:把數(shù)據(jù)結構和對數(shù)據(jù)結構進行操作的方法封裝形成一個個的對象。 2.什么是類?...
    少帥yangjie閱讀 5,127評論 0 14
  • 文丨林溪先生 圖片丨Jerrywangqian,閉眼緘默 01 ▼ “自律”,聽起來這個詞讓人很向往,人人都會說...
    林溪間閱讀 742評論 0 0

友情鏈接更多精彩內(nèi)容