您可以使用无名结构或联合用于什么?

Chr*_*ver 11 c++

我可以看到怎么样

union {
uint32_t ip_address
 struct {
          uint8_t oct1;
          uint8_t oct2;
          uint8_t oct3;
          uint8_t oct4;
        };
};
Run Code Online (Sandbox Code Playgroud)

可能对某人有用,但结构示例中的结构: MS警告C4201的细节似乎有点奇怪.谁能证明一个好的用例?

Bla*_*iev 12

一个无名的union内部struct有意义,因为它允许您引用联合的成员而不指定其名称,因此更短的代码:

struct {
  int a;

  union {
    int b, c, d;
  };
} foo;
Run Code Online (Sandbox Code Playgroud)

所以访问它的成员union就像访问包含结构的成员:foo.afoo.b.否则,您必须使用foo.union_name.b访问联合的成员.

当然,"用户"程序员使用这样的结构应该知道,设置foo.c影响的数值foo.bfoo.d.

出于同样的原因,可以进行相反的操作,即将匿名struct放入union:

union {
  struct {
    int a, b;
  };

  int c;
} foo;
Run Code Online (Sandbox Code Playgroud)

这种方式foo.afoo.b可以同时使用,并foo.c可以在其他情况下使用.

我想不出匿名结构或联合的任何其他用途."声明"一个匿名的结构/联合是一个矛盾,就像说int;而不是int a;.


Sim*_*ter 5

这主要是因为struct和union非常相似.通常,只有在联合中使用匿名结构和结构中的匿名联合才有用,但在联盟内的结构或联合内嵌套结构大致相当于直接列出其成员.

请注意,不应使用联合来转换值,因为绝对没有布局保证.