如果一個類是這樣定義的:
Class A { public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const int c; }
假如在構造函數中對三個私有變量進行賦值則通常會這樣寫:
A::A(int pram1, int pram2, int pram3) { a=pram1; b=pram2; c=pram3; }
但是,這樣是編譯不過的。因為常量和引用初始化必須賦值。所以上面的構造函數的寫法只是簡單的賦值,並不是初始化。
正確寫法應該是:
A::A(int pram1, int pram2, int pram3):b(pram2),c(pram3) { a=pram1; }
采用初始化列表實現了對常量和引用的初始化。采用括號賦值的方法,括號賦值只能用在變量的初始化而不能用在定義之后的賦值。
凡是有引用類型的成員變量或者常量類型的變量的類,不能有缺省構造函數。默認構造函數沒有對引用成員提供默認的初始化機制,也因此造成引用未初始化的編譯錯誤。並且必須使用初始化列表進行初始化const對象、引用對象。