首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++11 類內成員初始化:語法與規則詳解

     編輯:關於C++

C++11 新特性:非靜態成員變量可在類定義中直接初始化

class Session {
    int mem1 = 10;              // 等號初始化
    double mem2 {1966.54};      // 列表初始化 (C++11)
    short mem3;                 // 無默認值
public:
    Session();                                      // #1
    Session(short s) : mem3(s) {}                   // #2
    Session(int n, double d, short s) : mem1(n), mem2(d), mem3(s) {} // #3
};

等價構造函數展開

編譯器會為未在初始化列表中顯式出現的成員,自動插入類內默認初始化:

Session() : mem1(10), mem2(1966.54) {}           // #1 等價
Session(short s) : mem1(10), mem2(1966.54), mem3(s) {} // #2 等價

#3 顯式初始化列表會覆蓋類內默認值。

初始化語法限制

  • 允許 = 和 {} (列表初始化)。
  • 禁止 () 圓括號初始化(避免與函數聲明混淆)。

優勢

  1. 減少重複代碼:多構造函數共享默認值,無需在每個初始化列表中重複。
  2. 降低出錯風險:修改默認值只需改一處。
  3. 模板友好:模板類中成員類型未知時,類內初始化避免了在構造函數體中對未知類型進行賦值的風險。

注意事項

  • 類內初始化僅適用於非靜態成員;靜態成員仍需在類外定義並初始化 (除非是 constexpr 整型)。
  • 若構造函數初始化列表提供了值,類內默認值被忽略(覆蓋)。
  • 初始化順序仍遵循成員聲明順序,與初始化列表書寫順序無關。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved