我有个布尔结构。
除bool
外,它不包含其他数据成员。
struct foo {
bool b1 = false;
bool b2 = false;
bool b3 = false;
// many more ...
};
不使用反射或代码生成,
我正在寻找一种简单的方法将它们全部设置为true,然后将它们全部设置为false。
在任何地方记忆它们合法吗?
foo f;
memset(&f, true, sizeof f);
memset(&f, false, sizeof f);
只要我保证数据成员始终是基元,这是否是安全且定义明确的操作?如果不是,是否有其他建议可确保将所有大型布尔值(将来可能会添加更多布尔值)始终设置为true / false。我还想默认将它们保留为false。我想偶尔将它们全部设置为true的原因是,它对于单元测试和代码覆盖很有用。
答案 0 :(得分:3)
由于在编译时已知bool
的数量,因此您可以轻松地用bitset
替换这些结构
struct foo {
bool b1 = false;
bool b2 = false;
bool b3 = false;
};
可以简单地成为bitset<3U>
。这将允许您使用:
为boolean type使用memset
的关键问题是:
sizeof(bool)
的值是实现定义的,可能不同于1
因此,在实现上定义了bool
是否将foo
假定位于memset(&f, true, sizeof f)
中的每个存储器字节上。