代码之家  ›  专栏  ›  技术社区  ›  Trevor Hickey

我可以合法地在所有真/假之间设置布尔结构吗?

  •  1
  • Trevor Hickey  · 技术社区  · 6 年前

    我有一个布尔结构。
    它不包含其他数据成员,只包含 bool .

    struct foo {
     bool b1 = false;
     bool b2 = false;
     bool b3 = false;
     // many more ...
    };
    

    不使用反射或代码生成,
    我正在寻找一种简单的方法,将它们全部设置为真,然后将它们全部设置为假。

    在任何地方把它们记住都是合法的吗?

    foo f;
    memset(&f, true, sizeof f);
    memset(&f, false, sizeof f);
    

    只要我保证数据成员始终是基本的,这是一个安全且定义良好的操作吗?如果没有,是否有其他建议来确保一个大型布尔值集(将来可能会添加更多布尔值)可以一致地全部设置为真/假。我还想让它们默认为false。我偶尔想把它们都设置为true的原因是,它对单元测试和代码覆盖率很有用。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Jonathan Mee    6 年前

    因为 bool 在编译时,你可以很容易地用 bitset

    struct foo {
        bool b1 = false;
        bool b2 = false;
        bool b3 = false;
    };
    

    可以简单地成为一个 bitset<3U> 。这将允许您使用:

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

    使用的关键问题 memset 对于 boolean type 那是:

    价值 sizeof(bool) 是否定义了实现,可能与1不同

    因此,它是由实现定义的 布尔 s将位于内存中的每个字节 foo memset(&f, true, sizeof f) 假设。

    推荐文章