C 11 可以這麼玩初始化列表嗎?

2021-07-14 11:25:19 字數 1301 閱讀 5306

我們知道c++11新增了初始化列表,在之前的部落格中也有過介紹。

**c++中的初始化列表(區別賦值和初始化)

c++11特性之initializer_list

今天就討論這麼用初始化列表,不喜勿噴。

先寫乙個類:

class ******type

; // << wow!

int b ; // << wow2!

string name ; // wow3!

public:

******type() "

<< endl;

}~******type()

};

使用這個類:

******type obj;
輸出:

******type::ctor,

來說說什麼這麼寫有用:

1簡潔

2你不會忘記初始成員變數

3當你有好幾個建構函式的時候,這麼寫更有好處

對上面的類就行簡單的修改:

class ******type

; // << wow!

int b ; // << wow2!

string name ; // wow3!

public:

******type()

******type(int aa, int bb)

: a(aa), b(bb) // << custom init!

"<< std::endl;

}~******type()

};

對修改後的類進行使用:

class advancedtype

advancedtype(int a) : ******(a, a)

~advancedtype()

};

使用:

advancedtype adv;
輸出:

******type::ctor, 

advancedtype::ctor

使用:

advancedtype advobj2(10);
輸出:

******type::ctor(aa, bb), 

advancedtype::ctor(a)

***:

想要乙個空的成員變數的時候,比如vector等等。

C 11之列表初始化

c 98使用 對陣列初始化 int arr int arr 4 但對於自定義型別會報錯 vectorv 內建型別 int x1 int x2 int x3 1 2 int x4 int x5 陣列 int arr1 5 int arr2 動態陣列 c 98不支援 int arr3 new int 5...

C 11 就地初始化與列表初始化

在 c 11 之前,只能對結構體或類的靜態常量成員進行就地初始化,其他的不行。class c class c or int b c 11 only int c 7 error 注意,小括號初始化方式不能用於就地初始化。c 11 支援了就地初始化非靜態資料成員的同時,初始化列表的方式也被保留下來,也就...

c 11 就地初始化與列表初始化

還可以看看 在c 11之前,只能對結構體或類的靜態常量成員進行就地初始化,其他的不行。class c class c 或int b c 11 only int c 7 error 1.2就地初始化與初始化列表的先後順序 c 11標準支援了就地初始化非靜態資料成員的同時,初始化列表的方式也被保留下來,...