|
|
1
16
当前C++标准不允许在工会内部使用非POD类型。您将从中获得此编译器错误
新C++标准 C++0x )提议 unrestricted unions ,但是 adds yet more object lifetime pitfalls to C++ . |
|
|
2
9
不能有包含非POD类类型的联合。您的示例将无法编译。
|
|
|
3
2
从C++标准,第9.5节:
这里,对于“非平凡”改为“有用”:-) |
|
|
4
2
C++标准不允许程序,所以它(最好)实现定义了什么。
如果所有析构函数都被调用,并且它们都释放了“它们的”内存,那么您将执行双重释放(三重,acually);这可能会损坏分配数据结构,这是一件坏事。如果崩溃了,要高兴,因为如果不崩溃,调试会困难得多。 我想这些问题可能是 标准不允许这样。
|
|
5
2
现在C++标准支持变体。检查 https://en.cppreference.com/w/cpp/utility/variant .
在标题中定义
(从C++17开始)
类模板
与联合一样,如果变量持有某个对象类型T的值,则T的对象表示将直接分配到变量本身的对象表示中。不允许变量分配额外(动态)内存。
变量不允许包含引用、数组或类型void。空变体也是格式不正确的(
允许变体多次保存同一类型,并保存同一类型的不同cv限定版本。
与工会在选举期间的行为一致
aggregate initialization
,默认构造的变量保留其第一个备选方案的值,除非该备选方案不可默认构造(在这种情况下,该变量也不可默认构造)。助手类
|
|
|
6
1
你可能想看看 Boost.Variant 它可以包含不同类型的单个值。 |