建構函式與初始化列表是不同的

2021-06-20 19:51:32 字數 637 閱讀 7482

今天在《c++ prime》(真是一本好書啊,剛買來看,就學到了不少東西,果然學程式設計是幸福的,有那麼多好書可以看)中看到了初始化列表和建構函式的不同之處。

它們的不同之處在於

--初始化列表是真正的初始化 ---相當於int a = 10;

而建構函式的函式體中的初始化(應該不能叫做初始化了)只是賦值而已 ---相當於   int a; a = 10;

這些不同是可以在其他c++書中由理解得到,但是書中沒有說,以至於自己也不知道是不是真的是這樣。

為了驗證這個,下面做乙個實驗

先說明乙個東西,如果a是乙個類,類中有拷貝建構函式,和過載了=號運算子

那麼a  a1;

a  a2 = a1;//初始化。呼叫拷貝建構函式

a a3;

a3 = a1;//賦值,呼叫過載的=號運算子函式

下面要做的實驗與這個有關

#includeusing namespace std;

class a

a(const a&){cout<<"copy"<

輸出結果是:

copy

那麼結果就顯而易見了。

其實從const成員只能在初始化列表,而不能在建構函式體內部初始化就能得出了。

只不過這個例子更能體現而已

建構函式初始化列表

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...

建構函式初始化列表

c 程式語言中有很多比較重要的概念值得我們去深入 比如今天為大家介紹的有關c 建構函式的相關概念。這一方面的知識在實際程式設計中就是乙個比較重要的應用技術。希望能個大家可以從中學到一些知識。c 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...

建構函式初始化列表

class object private int v1,v2 看看願意是 先初始化v2為5,然後初始化v1為 3 倍的 v2 但是結果卻是奇葩的,這個是因為建構函式的初始化列表遵循的原則是先初始化父類 父類也是這個原則,那麼就相當於遞迴 然後初始化本類的成員,最後執行建構函式的函式體 而初始化本類的...