代码
使用 g++ -std=c++11编译以下程序
#include<vector>
#include<iostream>
using namespace std;
class MyHashSet {
int a = 32;
vector<unsigned> masks;
public:
MyHashSet():masks(a){cout<< masks.size()<<endl;}
};
int main(){
MyHashSet* obj = new MyHashSet();
return 0;
}
输出为32
#include<vector>
#include<iostream>
using namespace std;
class MyHashSet {
vector<unsigned> masks;
int a = 32;
public:
MyHashSet():masks(a){cout<< masks.size()<<endl;}
};
int main(){
MyHashSet* obj = new MyHashSet();
return 0;
}
输出为0
结论
在g++ c++11中未进行初始化之前int类成员变量默认为0,类成员变量初始化是按照声明的顺序来进行(c++11及以上版本才可以在类声明中赋值)。第一个例子中,成员变量 masks 初始化的时候成员变量 a 还没有初始化默认为0,所以 masks 长度初始化为0;第二个例子中 masks 初始化的时候 a 已经初始化默认为32,所以 masks 长度初始化为32。