C 11新標準之二 初始化列表

2021-06-25 09:41:43 字數 679 閱讀 3156

c++11引入了乙個新的初始化方式,稱為初始化列表(list initialize),具體的初始化方式如下:

int i = ;

int j;

1. 當初始化內建基本型別的時候,列表初始化不允許出現隱式型別的轉換,例如:

long double ld = 3.1415926536;

int a, b = ; //出錯,不允許出現精度的丟失

int c(ld), d = ld; // 非列表初始化,但是會出現精度的丟失

2. 初始化列表可以用於初始化結構體型別,例如:

#include struct person

;int main()

; std::cout << p.name << " : " << p.age << std::endl;

}

3. 其他一些不方便初始化的地方使用,比如std的初始化,如果不使用這種方式,只能用建構函式來初始化,難以達到效果:

std::vectorivec1(3, 5);

std::vectorivec2 = ;

std::vectorivec3 = ; //不使用列表初始化用建構函式難以實現

C 11新標準學習之花括號初始化列表

花括號列表初始化,作為c 11新標準的一部被加入到了c 中。所謂花括號列表初始化,即是用花括號來初始化變數,其形式如 int test 無論是初始化物件還是為物件賦值 在c 11下都可以使用這種形式的初始值。不同的一點 是 使用這種形式來初始化內建型別的變數時,若存在型別轉換且具有丟失資訊的風險時,...

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 支援了就地初始化非靜態資料成員的同時,初始化列表的方式也被保留下來,也就...