在C++11標準以前我們都不可以在類中對數據成員初始化,僅能在構造函數中進行初始化:
class A
{int a,b; double c; string d;A():a(1),b(2),c(3),d(""){}
};
在C++11標準以后我們可以在類中對非靜態成員進行初始化。實際上的機制是在調用構造函數的時候再根據類中的初始化進行賦值。
class A
{//和上面的方法等價,這樣寫使得構造函數更加簡潔。int a=1,b=2; double c=3; string d="";A(){}
};
靜態成員變量的初始化必須在類的外部,即先在類中定義,再在類外進行初始化。而且必須初始化。
初始化格式為:
數據類型 類名::靜態變量名=初值;
不需要static
關鍵字
但是靜態常量整型成員的初始化可以在類內進行,例如:
class A
{static const int a=5;//沒有問題,但僅僅這種類型可以A(){}
};
靜態變量會在程序運行的最后進行析構,析構順序為先創建先析構,后創建后析構。