C++ 陣列的 auto 和 decltype

double64發表於2024-09-21

當使用陣列作為一個 auto(參見 2.5.2節,第61頁)變數的初始值時,推斷得到的型別是指標而非陣列:

int ia[]= {0,1,2,3,4,5,6,7,8,9}; // ia是一個含有10 個整數的陣列
auto ia2(ia);                    // ia2 是一個整型指標,指向 ia 的第一個元素
ia2 = 42;                        // 錯誤:ia2是一個指標,不能用int值給指標賦值

當使用 decltype 關鍵字(參見 2.5.3 節,第 62 頁)時上述轉換不會發生,decltype(ia) 返回的型別是由10個整數構成的陣列:

decltype(ia) ia3={0,1,2,3,4,5,6,7,8,9}; // ia3是一個含有10個整數的陣列
ia3 = p;                               // 錯誤:不能用整型指標給陣列賦值
ia3[4]= i;                             // 正確:把i的值賦給 ia3 的一個元素




《C++ Primer》 P105

相關文章