gpt4 book ai didi

c++ - Boost Variant 本质上是 C/C++ 中的 union ?

转载 作者:IT老高 更新时间:2023-10-28 22:25:17 29 4
gpt4 key购买 nike

我想知道 c/c++ 中的 Boost Variant 和 union 数据类型之间有什么区别。我知道 union 数据类型占用相同的内存位置,并且内存区域中最大的数据类型占用使用的内存总量,例如

union space {
char CHAR;
float FLOAT;
int INTEGER;
}S;

应该占用 4 个字节的内存,因为 intfloat 是最大且相等的大小。 Boost Variant 和 union 数据类型在其他方面是否有相同点和不同点?我也知道 Boost Variant 可以采用任何数据类型,并且它允许数据类型“多态性”(如果我误用了 OOP 主题词,请纠正我)。因此, union 数据类型也是一种多态性吗?

最佳答案

主要区别在于 Boost 的 Variant 知道其中存储了哪种类型,因此您不会犯错误或因误用 Variant 而导致 UB,就像使用 union 一样。这也允许 Variant 采用非 POD(即实际有用的)类型。 Variant 还有一些额外的技巧,例如允许访问者和递归变体。

使用 union 的最佳指南是“不要,因为在不调用 UB 的情况下几乎不可能充分利用它们”。这不适用于 Variant,因此推荐更安全。

关于c++ - Boost Variant 本质上是 C/C++ 中的 union ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901826/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com