为什么std :: aligned_union需要最小大小作为模板参数?

时间:2014-11-21 19:58:33

标签: c++11

std::aligned_unionstd::size_t"最小长度"参数。现在,一个通常的联盟没有这个,所以我想知道为什么这是必要的。有人可以向我解释原因吗?

2 个答案:

答案 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])