位於參數列後、函數體 `{` 前,**早於函數體任何代碼執行**。
class A { public: A(int x); };
class B : public A {
public:
B(int x, int y) : A(x) { ... } // 必須在這裡呼叫 A(x)
};
| 方式 | 過程 | 效能 |
|---|---|---|
初始化列表 : 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;
}
內建型別無建構/析構開銷,函數體賦值碼風格常更清晰。**團隊統一風格即可**。