我的编译器(C++Builder6)在语法上允许数组成员初始化(至少为零),但实际上它并没有真正做到这一点。因此,下面给出的示例中的断言会失败,具体取决于上下文。
#include <assert.h>
struct TT {
char b[8];
TT(): b() {}
};
void testIt() {
TT t;
assert(t.b[7] == 0);
}
目前无法选择更改编译器。我的问题是:就未来的可移植性和标准一致性而言,“修复”此缺陷的最佳方法是什么?
Edit:事实证明,我的第一个例子 was 过短。它忽略了一点,即数组的填充级别非常重要,以至于它必须存储在离数组非常近的地方,即:在同一个类中。
Even if 原来的问题仍然存在,我的实际问题模式通常是这样的:
struct TT2 {
int size;
char data[8];
// ... some more elements
TT2(): size(0), data() {}
// ... some more methods
};
我想你可以用这个:
TT() { std::fill(b, b + 8, char()); }
这样您就可以解决您的问题,同时在可移植性和标准一致性方面没有任何问题!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)