我正在编写一些代码,偶然发现了这样的东西:
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/