明其理,而知其然也.
先給理論。
1. 初始化 != 賦值.
a.初始化代表為變數分配記憶體. 變數在其定義處被編譯器初始化(編譯時). 在函式中, 函式引數初始化發生在函式呼叫時(執行時).
b.賦值代表"擦除物件當前值, 賦予新值". 它不承擔為物件分配記憶體的義務.
2. c++中, 類成員的初始化於初始化列表中完成, 先於建構函式體執行. 即成員真正的初始化發生在初始化列表中, 而不是建構函式體中.
再給說明。
1. 如果類中有乙個成員是乙個引用, 由於引用必須給予初始值, 因此, 引用必須使用初始化列表.
2. 同理, const屬性必須給予初始值, 必須使用初始化列表.
3. 繼承類中呼叫基類初始化建構函式, 實際上就是先構造基類物件, 必須使用初始化列表.
別的不再說明, 什麼時候必須使用初始化列表是很明顯的;
另外, 簡單的說, 任何時候都鼓勵使用初始化列表, 一些別的事情(比如在建構函式中分配資源之類的, 請參考raii, resource acquizition is initialization)可以放在建構函式體內完成.
C 定義建構函式必須使用初始化列表的場合
明其理,而知其然也.先給理論。1.初始化 賦值.a.初始化代表為變數分配記憶體.變數在其定義處被編譯器初始化 編譯時 在函式中,函式引數初始化發生在函式呼叫時 執行時 b.賦值代表 擦除物件當前值,賦予新值 它不承擔為物件分配記憶體的義務.2.c 中,類成員的初始化於初始化列表中完成,先於建構函式體...
(C )建構函式初始化
vc 中的對於類的定義是有很大的不同。例如在.net程式中對於需要初始化的引數可以直接的賦值,而在vc 中對於需要初始化的引數則需要使用不同的方法。例如對於char字元則需要使用strcpy s函式賦值而相反對於布林型別 bool 整數型別 int 則可以使用運算子 對其初始化。1.定義乙個帶有引數...
C 建構函式初始化
建構函式後面增加冒號一般有三種作用 1 對成員變數的初始化 2 對類成員物件初始化 3 對父類進行初始化 include include using namespace std class a int get key int main 答案 class a 類物件初始化 int get key in...