| 情境 | 是否呼叫 | 說明 |
|---|---|---|
Student s; (區域變數) | **否** | 未定義值,VS 執行期檢查報錯 |
Student arr[4]; (陣列) | **否** | 同上 |
vector<Student> vec(5); | **是** | 容器需初始化元素,調用隱式預設建構 |
new Student[4] | **是** | 動態陣列預設初始化 |
Student s = Student(); (值初始化) | **是** | 顯式請求值初始化,成員歸零 |
class Student { public: int val; }; // 無使用者建構函數
int main() {
Student s; // 未初始化,val 隨機
Student arr[4]; // 未初始化
vector<Student> vec(5); // 調用隱式預設建構,val 不定 (視實作)
Student* p = new Student[4]; // 調用隱式預設建構,val 不定
Student ss = Student(); // 值初始化,val = 0
}
Student() = default;,使意圖明確。Student() : val(0) {}。int val = 0; (C++11 非靜態成員初始化),配合 = default 最簡潔。「類別沒寫建構函數,編譯器會幫我把成員初始化為 0。」
**錯誤**。僅靜態/全域物件保證零初始化;區域/動態物件**不初始化**。