std::aligned_union有一个std::size_t“最小长度”参数。现在,通常的工会没有这个,所以我想知道为什么这是必要的。有人可以向我解释为什么吗?
相关论文似乎是N2140。从根本上来说,原因是您可以过度对齐类型。给出的例子是你可以制作一个页面对齐的数据结构。
(我首先将aligned_storage和aligned_union混淆了,抱歉)。
Aligned_storage 在N2140 中被描述为aligned_union 的可能基类。aligned_storage<N, ...>N2140 还描述了(但不强制要求)作为对齐的扭曲器的点的实现char[N]。显然你需要N。
因为它是一种不平凡的平凡类型;)
std::aligned_union是至少具有给定大小和每个指定类型的对齐方式的 POD 类型。这些类型不必是 POD 类型,从这里可以看出它们不能是成员。
但是,您可以做的是使用placement new将a放入T[n]该存储中,前提是aligned_union已对齐T并且其大小至少为sizeof(T[n])