c++ - 我可以在所有 true/all false 之间合法地 memset bools 结构吗?

标签 c++ memset

我有一个 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> .这将允许您使用:

  • set 将所有位设置为 true
  • reset 将所有位设置为 false

使用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/

相关文章:

c++ - 如何在 Halide 中单独修改颜色 channel ?

c++ - GDB Backtrace 不使用 cmake 显示函数名称

java - 如何在java中将二维数组的所有元素初始化为任何特定值

c++ - 在运行时从元组中提要模板函数元素?

c++ - static_cast 可以在 C++ 中抛出异常吗?

c++ - 如何从 QListView 中搜索和选择项目?

c - 使用 memset 和 memcpy 的问题

c++ - 将 ULONGLONG 分配给 16 字节数组的结果是什么?

c++ - cudaMalloc()是否将数组初始化为0?

c++ - 读取/写入 void* 变量的单个字节