什么是工会?

Avi*_*ash 10 c c++

最近我的工作窗口,我发现很多数据结构的定义structunion成员变量.这样的例子将EVT_VARIANT在Windows中.

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

Jar*_*Par 16

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

例如

enum NumberKind {
  Integer, 
  FloatingPoint 
};

struct Number {
  NumberKind kind;
  union {
    int integerValue;
    float floatValue;
  };
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我定义了一个struct可以具有数值类型类型的数字:浮点数和整数.同时拥有两者并不是有效而不是浪费空间,因为两个成员总是被定义,我创建了一个union使得两者的存储量等于最大值的大小.

根据要求提供上面的样品使用

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

  • 这是目前标记为C和C++的问题中的纯C++答案.也许downvoters将其视为C代码而不是C++代码?也许答案应该解决这段代码所说明的C和C++之间的差异? (2认同)