使用反證法即可證明。
如果使用值傳遞形式構造類的複製建構函式,在使用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物件的值來為乙個新物件進行初始化時,編譯器會在...