1

我发现初始化有一个奇怪的地方,我正试图解决这个问题。我知道可以通过 using 将数组初始化为所有默认值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)。这是为什么?

4

1 回答 1

10

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

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

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

于 2013-09-11T21:24:30.933 回答