我有一个 bool 结构。
除了 bool
之外,它不包含其他数据成员。
struct foo {
bool b1 = false;
bool b2 = false;
bool b3 = false;
// many more ...
};
不使用反射或代码生成,
我正在寻找一种简单的方法将它们全部设置为 true,然后将它们全部设置为 false。
对它们进行 memset 在任何地方都是合法的吗?
foo f;
memset(&f, true, sizeof f);
memset(&f, false, sizeof f);
只要我保证数据成员始终是原语,这就是安全且定义明确的操作吗?如果没有,是否有任何其他建议来确保可以始终将大量 bool 值(将来可能会添加更多 bool 值)全部设置为 true/false。我还想让它们默认为 false。我偶尔想将它们全部设置为 true 的原因是它对单元测试和代码覆盖率很有用。
最佳答案
因为 bool
的数量s 在编译时已知,您可以轻松地将这些结构替换为 bitset
struct foo {
bool b1 = false;
bool b2 = false;
bool b3 = false;
};
可以简单地变成一个bitset<3U>
.这将允许您使用:
使用memset
的关键问题对于boolean type是这样的:
The value of
sizeof(bool)
is implementation defined and might differ from 1
因此实现定义了是否bool
s 将位于 foo
中的每个内存字节处作为memset(&f, true, sizeof f)
假设。
关于c++ - 我可以在所有 true/all false 之间合法地 memset bools 结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507606/