c++11之二: 类成员变量初始化

在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来对静态常量成员进行声明。

 

posted @ 2014-08-05 11:59  zxpo  阅读(6725)  评论(0编辑  收藏  举报