getline(cin, s)保留空白字元,可作為 while 條件:while (getline(cin, s))。
+ 左結合,至少一邊為 string 即可:
string s = "hello" + "world"; // 錯誤:兩邊都是字面值
string s = string("hello") + "world"; // 正確
string s = "hello" + string("world"); // 正確
s = "hello" + "," + "world"; // 錯誤:前兩個相加失敗
int a[3] = {1, 2}; // a = {1,2,0},缺省值 0 初始化
int b[] = {1, 2, 3}; // 推導大小
// 全域/靜態陣列自動 0 初始化
// 局部陣列不初始化則值不定
從變量名向外讀:int *(&arr)[10] → arr 是 10 元素 int* 陣列的引用。
int arr[] = {1,2,3};
int *p = arr;
cout << *p++ << endl; // 輸出 1,p 指向 arr[1]
cout << *++p << endl; // 輸出 3,p 指向 arr[2]
string s = "abcde"; const char* p = s.c_str(); // p 指向內部數據 s = "ABCDEF"; // 可能重新分配記憶體 cout << p; // 未定義行為!可能輸出舊內容 "abcde"
結論:修改 string 可能導致內部緩衝區遷移,舊指標失效。
int arr[] = {1,2,3,4,5};
vector v(begin(arr), end(arr)); // 或 v(arr, arr+5)
int ia[3][4]; // 3 個元素,每個是 4 個 int 的陣列 // 記憶體連續佈局:row-major
int a[10]; auto p = a; // int*(退化為指標) decltype(a) arr = a; // int[10](保持陣列類型)
for (auto &row : ia) // row 類型 int (&)[4]
for (auto &col : row) // col 類型 int&
col = 0;