c++ - 作为类私有(private)成员的无名结构/union

标签 c++ visual-c++ struct warnings

我正在编写一些代码,偶然发现了这样的东西:

class Foo
{
private:
  union {
    byte bar;
    struct {
      byte baz1;
      byte baz2;
    };
  };
};

现在,我在 VS 2010(纯非托管)下使用警告级别 4 进行编译,当然 VS 会提示无名结构/union 是非标准扩展(警告 C4201),我想修复该警告。

是否有任何理由有人会更喜欢以上内容:

class Foo
{
private:
  byte bar;
  byte baz1;
  byte baz2;
};

或者将前者更改为后者会中断的任何原因?

最佳答案

我相信你已经知道这一点——如果使用 union 内存存储在 union 成员之间共享。 您的第二个示例将为所有项目分配单独的存储空间 但第一个例子不会(在 bar 和匿名之间共享 结构)。

通常不推荐使用无名结构/union 看到这个网址:

Why does C++ disallow anonymous structs and unions?

我可以看到将示例 2 更改为 1,但不是 1 到 2 除非你依赖于存储共享的事实 union (这是非常糟糕的做法)..

关于c++ - 作为类私有(private)成员的无名结构/union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523985/

相关文章:

c++ - 不得删除 C++ 或 C 运算符之间的空格的示例

visual-c++ - 如何使用stdext::hash_map?

c++ - constexpr 函数可能存在错误?

c - 为什么我的结构中的变量会发生变化?

c - 从结构到数组的不完整复制

c++ - 什么是 __alldiv?

c++ - 循环遍历容器作为模板

c++ - 指向 DLL 中回调的指针

c - 什么是标签 namespace ?

c++ - 如何使用 painter 类绘制 svg 图形