Dan*_*ica 16 c++ libc++ stdarray
在 libc++ 中, 的特化std::array<T,0>有一个成员 ( const)char数组,该数组根据T(源) 进行对齐和调整大小。我想知道这个实现的原因是什么,因为这个成员(__elems_)似乎没有在任何地方使用。为了进行比较,libstdc++使用空成员,而Microsoft STL如果不可默认构造则使用空成员T(否则,它会创建单元素数组)。
差异的现场演示:https ://godbolt.org/z/1o167na6z
Ala*_*les 10
std::array允许具有零大小,但底层 c 数组不能为零大小。因此,实现需要一些特殊情况来处理这个问题。
该标准没有指定这个实现必须是什么,也没有对行为、调用front()或back()未定义的行为施加许多限制。有一个限制,即array.begin() == array.end(). 由于没有太多限制,您会期望不同的实现使用不同的解决方法。
Libc++ 最初使用单元素数组,但这不适用于非默认可构造类型。为了保持 ABI 兼容性,它被替换为char相同大小的数组。