C 初始化列表

2021-08-10 16:29:02 字數 802 閱讀 8032

我們已經知道const變數在c++里成了真正意義上的常量了,const變數的值儲存在符號表裡,雖然某些操作也會為其分配記憶體,但是值並不會儲存在那塊分配的記憶體。既然是常量,所以我們不能在程式裡作為左值,所以必須在定義的時候就初始化,但是類成員變數粗了static const int成員變數,其他型別的都只能定義,不能定義的時候初始化,那麼我們可以在類裡提供乙個const型別的成員變數嘛?編譯器是允許呢!

那我們在**初始化const型別的成員變數呢?難道在建構函式中嘛,肯定不行,const不能是左值啊。所以就引出了我們今天的主角,初始化列表。

當然初始化列表可以對任何乙個成員變數進行初始化,不僅僅是const型別的成員變數。

初始化列表是在建構函式的函式體之前執行的操作。而且比較有趣的是,初始化的順序並不是按照初始化列表中的出現順序,而是由成員變數宣告的順序決定的。通過一小段**說明。

class test

};

在這裡使用了初始化列表對一部分成員變數進行了初始化,這裡不考慮a的初始化了,因為它是在建構函式內部,此時初始化列表已經執行完操作了。初始化列表首先出現的是c,其次是b,但是按照宣告的順序,是b先被初始化為0,然後c被初始化0。此時a並沒有初始化,如果列表中有a,不管第幾個出現,一定是第乙個被初始化的。

看似到這裡都ok了,其實並沒有。因為在編譯的時候const型別的成員變數沒有初始值,所以無法進入常量表成為真正的常量。類中的const型別成員變數會分配記憶體,只是c語言中意義上的具有唯讀屬性的變數,說到底類中的const型別變數還是變數,而不是常量,可以通過強制轉換為非const指標或引用修改。這就真正敘述完了。

c 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的兩個執行階段 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段 初始化階段 所有...

C 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 ...

C 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段。所有類型別 class type 的成員都會在初始化階...