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

C++ 初始化全景:形式、規則、構造函數初始化列表、成員初始化順序

     編輯:關於C++

兩種初始化形式

  • **複製初始化**:`Type obj = value;` 可能產生臨時對象再拷貝(C++17 強制消除)。
  • **直接初始化**:`Type obj(value);` 或 `Type obj{value};` 直接調用匹配構造函數,效率更高。

變量初始化規則

構造函數初始化列表

**必須**用於:

  1. `const` 成員
  2. 引用成員
  3. 無默認構造函數的類類型成員
  4. 基類構造函數需要參數時
class Base { public: Base(int x) : val(x) {} int val; };
class Derived : public Base {
    const int c;
    int &ref;
public:
    Derived(int x, int y, int z) : Base(x), c(y), ref(z) {} // 必須列表初始化
};

成員初始化順序

**聲明順序**,與初始化列表書寫順序無關。
銷毀順序與初始化順序**相反**。

派生類構造流程

  1. 基類構造(按繼承聲明順序)
  2. 成員變量構造(按聲明順序)
  3. 派生類構造函數體執行

定義 vs 聲明

  • **定義**:分配存儲、可初始化。一個程序中實體僅能定義一次。
  • **聲明**:引入名字,不分配存儲。可多次聲明。
  • `extern` 聲明不定義;帶初始化器的聲明視為定義。

最佳實踐

  • 優先使用直接初始化(`{}` 或 `()`)。
  • 構造函數**總是**使用初始化列表初始化所有成員。
  • 成員聲明順序按「基類 → 數據成員 → 引用/const」排列,避免未初始化使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型全局/靜態局部(非靜態)
內置類型0 初始化不初始化(不定值)
類類型默認構造默認構造