c 複製建構函式形參為什麼是const引用

2021-10-09 20:54:13 字數 548 閱讀 1254

使用反證法即可證明。

如果使用值傳遞形式構造類的複製建構函式,在使用a初始化t時,呼叫複製建構函式。該函式為值傳遞形參,需要對a進行複製操作,又會呼叫複製建構函式,而複製建構函式是值傳遞,又需要進行複製操作…無限迴圈下去。顯然值傳遞是不可行的,解決辦法就是採用引用傳遞。

class

base

base

(base other)

~base()

};base a;

base t

(a);

ps:上述**無法通過gcc編譯器,有明確規定不能使用值傳遞作為複製建構函式的形參格式。

很簡單,為了**的安全性,防止對實參值的意外修改。符合常理,我們使用乙個物件去初始化另外乙個物件的時候,總不希望對原始物件有改變吧,哈哈。所以複製建構函式的格式為:

class

base

base

(const base &other)

~base()

};

學習如逆水行舟,不進則退。

為什麼複製建構函式的形參必須是引用型別?

複製建構函式只有乙個引數,由於在建立時傳入的是同種型別的物件,所以乙個很自然的想法是將該型別的物件作為引數,像這樣 sample sample a 不幸的是,即使是這樣樸實無華的宣告也隱含了乙個微妙的錯誤,呵,我們來看看 當某個時候需要以乙個sample物件的值來為乙個新物件進行初始化時,編譯器會在...

c 中為什麼複製建構函式的形參必須是乙個引用

class myclass 乙個簡單的類 myclass a 這樣通過myclass 的建構函式建立了乙個myclass的物件,同樣樣在函式傳參的時候 void fun myclass a 引數a也必須呼叫myclass的建構函式來生成物件,那麼在乙個類的拷貝建構函式中寫出了這樣形式 class m...

為什麼拷貝建構函式的形參必須是引用型別?

複製建構函式只有乙個引數,由於在建立時傳入的是同種型別的物件,所以乙個很自然的想法是將該型別的物件作為引數,像這樣 sample sample a 不幸的是,即使是這樣樸實無華的宣告也隱含了乙個微妙的錯誤,呵,我們來看看 當某個時候需要以乙個sample物件的值來為乙個新物件進行初始化時,編譯器會在...