在leetcode的playground中运行以下程序
#include<vector>
using namespace std;
class MyHashSet {
vector<unsigned> buckets;
vector<unsigned> masks;
int a = 32;
public:
MyHashSet():buckets(8, false), masks(a){}
};
void main(){
MyHashSet* obj = new MyHashSet();
}
编译通过(如果不在leetcode playground中运行,见 g++ -std=c++11 类成员变量的默认值和初始化顺序的实验),运行时提示错误:cannot create std::vector larger than max_size()。
问题出在
MyHashSet():buckets(8, false), masks(a){}
中的masks(a),因为此时a还没有初始化,把int a = 32放到最前面就没有问题了。在leetcode playground中没有初始化的int类成员变量是一个非常大的数字,其它编译器中就不一定了,也有定义为0的就不会出现这个错误提示,见 g++ -std=c++11 类成员变量的默认值和初始化顺序的实验)。