最近我在windows上工作,我发现很多数据结构被定义为struct
和union
作为成员变量。这方面的示例是 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/