class A {
const int length;
A(int len) { length = len; } // 編譯錯誤:const 成員無法賦值
};
C++ 標準規定:**`const` 成員、引用成員、無默認構造函數的類類型成員**,只能在**構造函數初始化列表**中初始化,不能在函數體內賦值。
class A {
const int length;
public:
A(int len) : length(len) {} // 初始化列表
};
| 誤區 | 正確理解 |
|---|---|
| 聲明 const 時未初始化,後面可賦值 | const 成員**聲明時不初始化**,但**必須在每個構造函數初始化列表**中初始化 |
| 構造函數體內賦值也行 | 構造函數體執行時成員已構造完成,const 成員不可再修改 |
語法強制 `const` 成員走初始化列表,體現「創建即定值」語義,避免默認構造+賦值的雙重開銷與邏輯漏洞。