c 成員變數初始化

2021-09-16 18:25:29 字數 1968 閱讀 2054

#include

#include

using

namespace std;

classa;

a a;

intmain()

類a的成員變數將進行預設初始化

c++11新特性允許為資料成員提供類內初始值

#include

#include

using

namespace std;

classa;

a a;

intmain()

a.a被初始化為1;

如果有建構函式,將按照建構函式的初始化列表進行初始化

#include

#include

using

namespace std;

classa}

;a a;

intmain()

a.a輸出5

對於const成員常量和引用型別變數第2條也是適用的

#include

using

namespace std;

classa}

;int

main()

a和b都被提供了類內初始值並且在建構函式初始化列表進行了初始化,最終輸出a.a=5,a.b=1說明a和b都被建構函式進行了初始化而不是類內初始值(猜測原因為提供了自定義建構函式後就會按照此建構函式進行初始化,如果沒有自定義建構函式或者自定義建構函式沒有進行列表初始化,那麼就會執行預設初始化,如果此時有類內初始值就按照它進行初始化)有建構函式初始化就按照建構函式,沒有就預設初始化

static變數在類內宣告,在類外定義和初始化,類外定義和初始化時不用加static關鍵字

using

namespace std;

classa;

int a::a =1;

intmain()

非const的static成員變數不允許提供類內初始值

using

namespace std;

classa;

int a::a;

//定義

intmain()

編譯出錯,顯示不能為nonconst member提供類內初始值

為const static成員變數提供類內初始值,如果提供類內初始值,就不允許再在定義的時候初始化。

using

namespace std;

classa;

const

int a::a;

//定義 如果在此處再次初始化,則會出錯

intmain()

const static成員變數如果只宣告不定義,並且宣告時也進行了初始化,則此變數相當於乙個立即數,可以通過變數名訪問其值,不可以取它的位址

using

namespace std;

classa;

//const int a::a; //不定義

intmain()

聯結器會提示找不到a::a,因為此符號並沒有定義。

const static成員變數如果只宣告不定義,並且宣告時沒有進行初始化,也就沒法當乙個立即數使用,自然也就無法輸出a::a

using

namespace std;

classa;

//const int a::a; //不定義

intmain()

總結:nonconst static成員變數不能對其提供類內初始值,const可以提供,const static也可以提供。

參考:

初始化列表成員變數的初始化

對於以下程式 include using namespace std class base base b 0 a b int get a int get b int main 本想得到的結果是a,b都為90。但是實際結果卻是 4273046 90process returned 0 0x0 exec...

類成員變數初始化

在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...

C 中成員變數的初始化

類成員變數的初始化對於初學者來說是乙個頭疼的問題,總是記不住 型別應該怎樣進行初始化。為了解決後顧之憂,今天就把類中所有型別的成員變數的初始化做乙個總結。首先,我們來看看c 的類中都有哪幾種型別的成員變數。class test 大概的型別就是這幾類,當然還有其他一些比如 int f int g co...