c++ - 您可能会使用无名结构或 union 来做什么?

标签 c++

我明白了

union {
uint32_t ip_address
 struct {
          uint8_t oct1;
          uint8_t oct2;
          uint8_t oct3;
          uint8_t oct4;
        };
};

可能对某些人有用,但这里是结构示例中的结构: Detail of MS warning C4201似乎有点奇怪。谁能展示一个好的用例?

最佳答案

struct 中的无名 union 是有意义的,因为它允许您在不指定其名称的情况下引用 union 的成员,因此代码更短:

struct {
  int a;

  union {
    int b, c, d;
  };
} foo;

因此访问 union 的成员就像访问包含结构的成员:foo.afoo.b。否则,您必须使用 foo.union_name.b 来访问 union 成员。

当然,使用这种结构的“用户”程序员应该知道设置 foo.c 会影响 foo.bfoo.d 的值

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

union {
  struct {
    int a, b;
  };

  int c;
} foo;

这样foo.afoo.b可以同时使用,foo.c可以在另一种情况下使用。

我想不出匿名结构或 union 的任何其他用途。 “声明”匿名结构/union 是一种矛盾修饰法,就像说 int; 而不是 int a;

关于c++ - 您可能会使用无名结构或 union 来做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4626597/

相关文章:

c# - 如何使用 C# 接口(interface)将 C++ 智能指针返回到 PowerPoint 接口(interface)

C++方法链接导致析构函数被调用两次

c++ - g++ -std=c++0x 的意外编译问题

c++ - 奇怪的 cout 输出(代码块 codeblocks-16.01mingw-setup.exe)

c++ - 将条目添加到双端队列 C++

c++ - 在另一个中挂起和恢复一个 C++ 线程

c++ - 返回 vector 内对象的引用

c++ - 使用 <algorithm> 对结构 vector 进行排序

c++ - 英伟达 NSight "process creation failure"

c++ - std::regex 是否始终了解区域设置?