C++:初始化

技術C++:初始化

本文簡介 C++ 中的初始化。

1 初始化的類型

以下我們依據語法區分不同類型的初始化。

1.1 預設初始化

若物件在初始化時沒有使用初值設定式(ini­tial­iz­er),會進行預設初始化(default-initial­iza­tion)

  1. 目標型別是純量型別,則不進行初始化。
  2. 目標型別是類別型別,會呼叫預設建構函式以初始化。
  3. 目標型別是陣列型別,會對每一個元素進行預設初始化。

範例 1 以下是預設初始化的例子。

int n;
std::string s;

此時 n 不會被初始化(其值未定),而 s 會呼叫預設建構函式而成為空字串。

1.2 複製初始化

利用賦值語法初始化物件,稱為複製初始化(copy-initial­iza­tion)。此外,函式的引數傳遞與值的回傳也會進行複製初始化。

範例 2 以下是複製初始化的例子。

int n = 3;
std::string s = "fly";

1.3 直接初始化

利用呼叫建構函式的語法初始化物件,稱為直接初始化(direct-initial­iza­tion)

範例 3 以下是直接初始化的例子。

int n(3);
std::string s("fly");

1.4 列表初始化

利用初始化列表的初始化稱為列表初始化(list-initial­iza­tion)

利用賦值語法進行列表初始化,稱為複製列表初始化(copy-list-initial­iza­tion)

範例 4 以下是複製列表初始化的例子。

int n = {3};
std::string s = {'f', 'l', 'y'};

不藉由賦值語法而直接進行列表初始化,稱為直接列表初始化(direct-list-initial­iza­tion)

範例 5 以下是直接列表初始化的例子。

int n{3};
std::string s{'f', 'l', 'y'};