本質上,你是正確的,但不應將成員初始值設定項視爲與構造函數分開。初始化程序是構造函數的一部分,並在構造函數的主體之前調用。
當您聲明內置類型的自動變量時,它既是定義也是聲明。這是一個聲明,因爲標識符綁定到一個類型,並且它是一個定義,因爲編譯器爲它分配存儲空間。
int var1; // declares/defines var of type int
int var2 = 0; // declares/defines a var of type int and initializes it to 0
初始化程序在定義初始值時設置初始值,但在初始化程序之前已經定義初始值。
int x = 5;
int y = 5;
int main()
{
int x = x; // x is undefined here not 5 because x refers to itself
int y[y];
int size = sizeof(y)/sizeof(int); // size is 5 (y[5]) since y isn't defined until after the enclosing bracket so y referred to the global y in the declaration.
}
有一些變量必須然而初始化。常量和參考。
這與構造函數相同。成員的定義就在委員會主體之前。這是調用構造函數時成員和基礎的定義順序。
- 虛基類
- 基類
- 部件 - 在它們被宣佈
- 構造函數體執行
離開構造體後的順序,一切都已初始化。
如果你不使用初始值設定項,那麼你可以假定它已經在進入ctor體時已經定義了,但是你不能認爲它有任何特定的值。同樣,常量和引用必須在成員初始化程序中初始化。
「什麼是初始化列表?」一個用詞不當。你在談論'ctor-initializer'。初始化器列表完全是其他東西。 –
@Amar - 'int a [] = {1,2,3,4,5};' - '{1,2,3,4,5}'是初始化列表。 – Mahesh
我的意思是構造函數初始化列表; like sample :: sample:A(a)() – Amar