在C++11中,
1、允許非靜態成員變量的初始化有多種形式:初始化列表; 使用等號=或花括號{}進行就地的初始化。
可以為同一成員變量既聲明就地的列表初始化,又在初始化列表中進行初始化,只不過初始化列表總是看起來“后作用於”非靜態成員。
也就是說,初始化列表的效果總是優先於就地初始化的。
#include <iostream> 2 using namespace std; 3 class CBase{ 4 public: 5 CBase(){cout<<"mem default="<<mem<<endl;} 6 CBase(int i):mem(i){cout<<"mem init="<<mem<<endl;} 7 int mem{10}; 8 }; 9 10 int main(){ 11 CBase objA; 12 CBase objB(5); 13 }
mem default=10
mem init=5
2、非常量的靜態成員變量,與c++98保持一致。需要到頭文件以外去定義它,這會保證編譯時,類靜態成員的定義最后只存在於一個目標文件中。
3、靜態常量成員,除了const關鍵字外,還可以使用constexpr來對靜態常量成員進行聲明。
