使用类成员初始化数组时的奇怪行为
Odd behavior when initializing an array using a class member
我发现了一个奇怪的初始化,我试图绕开我的头。我知道数组可以使用 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
)。为什么?
问题是size
将在表之后初始化,因为它们的声明顺序。你需要
class Hashtable
{
int size;
int* table;
....
数据成员按其声明顺序进行初始化,而不是按照将它们放置在构造函数初始化列表中的顺序进行初始化。在合理的编译器上,适当的警告级别会告诉您这一点。
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- C++内联数组成员统一初始化
- 有没有办法把字符串数组成员放在".structurevariable"前面?
- 将初始化列表传递给 C++ 中的数组成员
- 具有灵活数组成员的结构的大小
- 初始化固定的 C 数组成员结构
- 带有布尔数组成员的 C++ 结构.如何在主代码中使用
- 我如何通过构造函数大小私人std ::数组成员
- 通过两个下标访问数组成员
- size_t结构非数组成员崩溃的强制转换
- 删除数组成员的更好方法是什么?
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 在C 中的数组初始化期间使用数组成员
- 友元函数将内存分配给数组成员是否有任何限制?
- 从结构传递数组成员会导致访问读取冲突
- 为什么 const char 数组成员的初始化在构造函数初始值设定项中不兼容
- 如何在 lambda 中访问数组成员
- 将整数值分配为variadic模板列表到静态const std ::数组成员