日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cpp / 拷贝构造函数的参数为什么必须使用引用类型

發布時間:2024/10/14 编程问答 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cpp / 拷贝构造函数的参数为什么必须使用引用类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表面原因:編譯器無法通過,會報如下錯誤:

error: invalid constructor; you probably meant ‘CExample (const CExample&)’CExample(CExample ex) //拷貝構造函數

深層次原因是避免拷貝構造函數無限制的遞歸下去。?

栗子:

#include <iostream>class CExample {int m_nTest;public:CExample(int x) : m_nTest(x){std::cout << "constructor with argument\n";}CExample(const CExample &ex){m_nTest = ex.m_nTest;std::cout << "copy constructor\n";}CExample &operator=(const CExample &ex){std::cout << "assignment operator\n";m_nTest = ex.m_nTest;return *this;}void myTestFunc(CExample ex){} };int main() {CExample aaa(2); // 輸出:constructor with argumentCExample bbb(3); // 輸出:constructor with argumentbbb = aaa; // 輸出:assignment operatorCExample ccc = aaa; // 輸出:copy constructorbbb.myTestFunc(aaa); // 輸出:copy constructorreturn 0; }

假設拷貝構造函數是傳值的,那么在執行如下代碼:

CExample ccc = aaa;

會將 aaa 傳值到形參,此時構造形參實例時會調用拷貝構造函數,這就造成了無限地構造下去,直至堆棧耗盡,所以為了避免這個問題的發生,直接從編譯器的角度禁用了該問題。

?

參考:拷貝構造函數的參數為什么必須使用引用類型_『小豬呼嚕嚕』的專欄 -- I Write,therefore I am.-CSDN博客_拷貝構造函數的參數

(SAW:Game Over!)?

?

?

總結

以上是生活随笔為你收集整理的Cpp / 拷贝构造函数的参数为什么必须使用引用类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。