![](/img/trans.png)
[英]How can I force clang to throw errors when the code doesn't strictly conform to the standard?
[英]How to zero array members when my compiler isn't standard conform
我的编译器(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
};
我想你可以用这个:
TT() { std::fill(b, b + 8, char()); }
这样您就可以解决您的问题,同时便携性和标准一致性没有任何问题!
我想附加以前的帖子,如果你使用字符数组作为字符串,那么在构造函数中写入就足够了
TT(){b [0] ='\\ 0'; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.