我的编译器(C++Builder6)在语法上允许数组成员初始化(至少为零),但实际上它并没有真正做到这一点。因此,下面给出的示例中的断言会根据上下文而失败。
#include <assert.h>
struct TT {
char b[8];
TT(): b() {}
};
void testIt() {
TT t;
assert(t.b[7] == 0);
}
更改编译器目前不是一种选择。我的问题是:就未来的可移植性和标准一致性而言,“修复”这个缺陷的最佳方法是什么?
编辑: 事实证明,我的第一个例子太短了。它忽略了这一点,数组的填充级别非常重要,它必须存储在非常接近数组的位置,即:在同一个类中。
即使原来的问题仍然存在,我的实际问题模式通常是这样的:
struct TT2 {
int size;
char data[8];
// ... some more elements
TT2(): size(0), data() {}
// ... some more methods
};