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

高品質 C++/C 程式設計指南 第 9 章 (二):初始化列表的效能與規範

     編輯:關於C++

9.2 初始化列表:建構函數的「黃金前置區」

位於參數列後、函數體 `{` 前,**早於函數體任何代碼執行**。

強制使用場景

  1. 繼承體系:派生類**必須**在初始化列表呼叫基類建構函數。
    class A { public: A(int x); };
    class B : public A {
    public:
        B(int x, int y) : A(x) { ... } // 必須在這裡呼叫 A(x)
    };
  2. const 資料成員:只能在列表初始化,函數體內無法賦值。
  3. 參考型別成員:同 const,必須綁定於初始化時刻。

成員物件初始化:列表 vs 函數體賦值

方式過程效能
初始化列表 : m_a(a)直接呼叫 A 的拷貝建構函數✅ 高效:一次建構
函數體賦值 { m_a = a; }1. 隱式呼叫 A() 預設建構
2. 呼叫 A::operator= 賦值
❌ 低效:建構 + 賦值 + 析構臨時物件

結論:非內建型別成員**必須用初始化列表**。

內建型別成員:兩者效能近似,風格取向

// 列表風格
F::F(int x, int y) : m_x(x), m_y(y) {
    m_i = 0; m_j = 0;
}

// 函數體風格 (較直觀)
F::F(int x, int y) {
    m_x = x; m_y = y;
    m_i = 0; m_j = 0;
}

內建型別無建構/析構開銷,函數體賦值碼風格常更清晰。**團隊統一風格即可**。

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