我发现初始化时有一种奇怪的感觉,我正试图绕过头脑。我知道可以使用T[size] {}
将数组初始化为所有默认值,这似乎在大多数情况下都有效,但在由类成员初始化时似乎不起作用,如:
class Hashtable {
int *table;
int size;
public:
Hashtable() : size { 10 }, table { new int[size]{} } {
for (int index = 0; index != size; ++index) { // size = 10
cout << table[index] << endl; // this displays an uninitialized array??
}
}
};
如果我尝试使用文字初始化table
,就像table { new int[10] {} }
一样,数组中的所有项都设置为默认值(0
)。那是为什么?
答案 0 :(得分:10)
问题是size
将在表之后初始化,因为它们的声明顺序。你需要
class Hashtable
{
int size;
int* table;
....
数据成员按其声明顺序初始化,而不是将它们放置在构造函数初始化列表中的顺序。合理编译器的合适警告级别会告诉您这一点。