首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ const 成員變量必須用初始化列表賦值:語法規定與底層原理

     編輯:程式設計疑難解答

現象

class A {
    const int length;
    A(int len) { length = len; } // 編譯錯誤:const 成員無法賦值
};

語法規定

C++ 標準規定:**`const` 成員、引用成員、無默認構造函數的類類型成員**,只能在**構造函數初始化列表**中初始化,不能在函數體內賦值。

正確寫法

class A {
    const int length;
public:
    A(int len) : length(len) {} // 初始化列表
};

深度解析

  • 初始化 vs 賦值:初始化列表直接調用成員的構造函數(初始化);函數體內是先默認構造後賦值(賦值)。
  • const 本質:`const` 對象創建後不可修改,只能在創建瞬間確定值,故必須初始化。
  • 引用同理:引用必須綁定到已存在對象,無法先創建再綁定。

常見誤區

誤區正確理解
聲明 const 時未初始化,後面可賦值const 成員**聲明時不初始化**,但**必須在每個構造函數初始化列表**中初始化
構造函數體內賦值也行構造函數體執行時成員已構造完成,const 成員不可再修改

總結

語法強制 `const` 成員走初始化列表,體現「創建即定值」語義,避免默認構造+賦值的雙重開銷與邏輯漏洞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved