我浏览了几本 C++ 书籍,但没有一本详细描述这一点:
在 VC++ 2010 中,我创建了一个结构体,其中故意添加了用于测试的构造函数:
struct BufferElement {
size_t currentAllocationSize;
BufferElement() {
currentAllocationSize=50;
}
BufferElement(size_t size) {
if (size==0)
currentAllocationSize=20;
else
currentAllocationSize=1;
}
};
我有一个这种结构类型的数组:
int _tmain(int argc, _TCHAR* argv[])
{
BufferElement buffers[10]={0};
buffers[6]=0;
for (int i=0; i<sizeof buffers/ sizeof buffers[0]; i++) {
printf("%d\n", buffers[i].currentAllocationSize);
}
return 0;
}
结果:
20
50
50
50
50
50
20
50
50
50
我希望我的数组初始化器列表{0}应该将所有元素初始化为 0。由于这是一个结构数组,因此 0 应该意味着用 0 调用构造函数。但是测试表明,除了第一个元素之外,它们都是使用默认构造函数调用。这是标准行为吗?当数组类型是结构时,我应该如何解释数组初始值设定项 {0}?如何确保调用我的单个 arg 构造函数而不必使用 {0,0,0,0,0,0,0,0,0,0}?因为我的数组大小可能会改变。