std::aligned_union
有std::size_t
"最小长度"参数。现在,一个通常的联盟没有这个,所以我想知道为什么这是必要的。有人可以向我解释原因吗?
答案 0 :(得分:3)
我打赌这是针对通用编程情况,其中可变参数类型列表可能为空。
在这种情况下,将使用某个最小尺寸,以便您仍然可以控制对齐(没有 type 来获取对齐值)
答案 1 :(得分:1)
相关文件似乎是N2140。原因在于你可以过度对齐类型。给出的示例是您可以创建页面对齐的数据结构。
(我首先将aligned_storage和aligned_union混淆了,抱歉)。
Aligned_storage在N2140中描述为aligned_union的可能基类。 N2140还描述了(但并未强制要求)将aligned_storage<N, ...>
点作为对齐char[N]
的预测器的实现。显然你需要N.
因为它是一个非平凡的琐碎类型;)
std::aligned_union
是一种POD类型,至少具有给定的大小,并且根据指定的类型进行对齐。这些类型不一定是POD类型,很明显它们不能成为POD类型。
然而,你可以做的是使用placement new将T[n]
放在该存储中,前提是aligned_union对齐T
且其大小至少为sizeof(T[n])
击>