【C++學習筆記】列表初始化規則

好好學習專用部落格發表於2017-04-03

C++規定了如下幾條關於初始化陣列的規則:

1、只有在定義陣列時才能使用初始化,此後就不能再使用了,也不能將一個陣列賦給另一個陣列。

2、初始化陣列時,提供的值可以少於陣列的元素數目。

3、如果只對陣列的一部分進行初始化,則編譯器將其他元素設定為0。因此,將陣列中的所有元素都初始化為0的方法——顯式的將第一個元素初始化為0,接下來讓編譯器將其他元素初始化為0即可。

4、如果初始化陣列時方括號([])為空,C++編譯器將計算元素個數。

C++11陣列初始化方法:

1、初始化陣列時,可省略等號(=)

double earnings[4] {1.2e4, 1.6e4, 1.1e4,  1.7e4};

2、可不在大括號內包含任何東西,這將把所有元素設定為零

unsigned int counts[10] = {};
float balances[100] {};

3、列表初始化禁止縮窄轉換

long plifs[] = {25, 92, 3.0};
char slifs[4] = {'h', 'i', 1122011, '\0'};
char tlifs[4] {'h', 'i', 112, '\0'};

第一句不能通過編譯,將浮點數轉為整型是縮窄操作,即使浮點數的小數點後面為零。

第二句也不能通過編譯,因為1122011超過了char變數的取值範圍(這裡假設char變數的長度為8位)。

第三句可以通過編譯,雖然12是一個int值,但它在char變數的取值範圍內。

相關文章