0 Xcode 10.1,編譯器clang GNU14++
1、整型數組的初始化-棧初始化
//默認初始化
int a[5] = {}; //[0, 0, 0, 0, 0]
//全部初始化為0
int a[5] = {0}; //[0, 0, 0, 0, 0]
//c++11新寫法
int a[5]{}; //[0, 0, 0, 0, 0]
//注意,想要整型數組 全部初始化為1的時候不能粗暴的設置為
int a[5] = {1}; //[1, 0, 0, 0, 0]
// 因為 數組初始化列表中的元素個數小於指定的數組長度時, 不足的元素以默認值填補。
//可以分別賦值
int a[5] = {1,1,1,1,1}; //[1,1,1,1,1]
2、字符串的初始化-棧初始化
和整型的初始化基本一致,會調用構造函數
string *str = string[5]; //調用5次默認構造函數
string *str1 = string[5]{"aaa"}; //數組中的第一個元素調用 string::string(const char *) 進行初始化。后面四個調用 默認構造函數
3、數組的默認初始化
如果不明確指出初始化列表,那么基本類型不會被初始化(全局變量和靜態變量除外),所有內存都是臟數據;且自定義的類類型會為每個元素調用默認構造函數進行初始化
int a[5]{};
a[6]; //32766
a[10]; //1474921429
// Xcode會提示 Array index 10 is past the end of the array (which contains 5 elements)。雖然不會爆紅,但是Xcode提示越界了。這在程序中也是需要特別注意的,越界時會取到臟數據。
string str[5]; //["","","","",""]
string str1[5] = {"","2","",""}; //["","2","',"",""]
string str2[5] = {"a"}; //["a","","","",""]
4、數組的堆初始化
int *a = new int[5]; //臟數據數組
int *str = new string[5]; //空字符串數組
int *b = new int[5]{0}; // [0,0,0,0,0]
int *str1 = new string[5] {"aaa"}; //["aaa","","","",""]
//以上幾行代碼遵循棧中數組的初始化規則,除此之外這里還有一個新語法
int *c = new int[5](); //[0,0,0,0,0]
//該語法后面的一對圓括號,表示使用默認值初始化整個數組,所以對於類類型來說,new string[5] 與 new string[5]() 是等價的,都會調用默認構造函數進行初始化;但是對於基本類型就不同了。new int[5]根本不會初始化,而new int[5]()則會使用int()的值,即0進行初始化。