c++ - 什么是 union ?

标签 c++ c

最近我在windows上工作,我发现很多数据结构被定义为structunion 作为成员变量。这方面的示例是 Windows 中的 EVT_VARIANT

我不明白这背后的目的是什么。

最佳答案

struct 包含 union 成员时,通常是作为一种节省空间的机制来完成的。如果 struct 可以是某些子类型,只有某些成员有效,那么 union 是不浪费空间的好方法。

例如

enum NumberKind {
  Integer, 
  FloatingPoint 
};

struct Number {
  NumberKind kind;
  union {
    int integerValue;
    float floatValue;
  };
};

在这种情况下,我定义了一个 struct Number,它可以具有数值类型: float 和整数。同时拥有两者是无效的,因此我创建了一个 union ,它使两者的存储量等于最大的大小,而不是通过始终定义两个成员来浪费空间。

根据要求使用上述示例

void PrintNumber(Number value) {
  if (value.kind == Integer) {
    printf("%d\n", value.integerValue);
  } else {
    printf("%f\n", value.floatValue);
  }
}

关于c++ - 什么是 union ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209096/

相关文章:

c - Turbo C 编译器和 Visual Studio 2012 中同一 C 程序的不同输出

c++ - 不能在 linux mint 中使用 SOIL

c - C中的字符串数组

c++ wait_until奇怪的超时行为

c++ - 发布中的错误而不是调试中的错误

创建输入文件大小未知的数组

c++ - 如何附加到加载我的 DLL 并调试它的进程

c - 如何确定我的 cpu 模拟器中的函数没有并行运行?

c++ - PCRE 忽略 C++ 中的匹配

c++ - 我需要初始化 std::string 吗