我想将一个类的填充字节设置为 0,因为我在字节级别保存/加载/比较/散列实例,并且垃圾初始化填充在每个操作中引入了不确定性。
我知道这将实现我想要的(对于可简单复制的类型):
struct Example
{
Example(char a_, int b_)
{
memset(this, 0, sizeof(*this));
a = a_;
b = b_;
}
char a;
int b;
};
我不喜欢这样做,有两个原因:我喜欢构造函数初始化列表,而且我知道将位设置为 0 并不总是与零初始化相同(例如,指针和浮点数不一定有零值都是 0 位)。
顺便说一句,它显然仅限于可简单复制的类型,但这对我来说不是问题,因为我上面列出的操作(在字节级别加载/保存/比较/散列)无论如何都需要可简单复制的类型。
我想要的是这样的[神奇]片段:
struct Example
{
Example(char a_, int b_) : a(a_), b(b_)
{
// Leaves all members alone, and sets all padding bytes to 0.
memset_only_padding_bytes(this, 0);
}
char a;
int b;
};
我怀疑这样的事情是可能的,所以如果有人可以提出一个不丑陋的替代方案......我全神贯注:)