使用类成员初始化数组时的奇怪行为

时间:2013-09-11 21:23:12

标签: c++ c++11

我发现初始化时有一种奇怪的感觉,我正试图绕过头脑。我知道可以使用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)。那是为什么?

1 个答案:

答案 0 :(得分:10)

问题是size将在表之后初始化,因为它们的声明顺序。你需要

class Hashtable 
{
    int size;
    int* table;
    ....

数据成员按其声明顺序初始化,而不是将它们放置在构造函数初始化列表中的顺序。合理编译器的合适警告级别会告诉您这一点。