提问者:小点点

为什么std::array<T,0>在libc中根据T调整大小和对齐?


在libc中,std::array的特化

现场演示的区别:https://godbolt.org/z/1o167na6z


共1个答案

匿名用户

std::array允许为零大小,但底层c数组不能为零大小。因此实现将需要一些特殊情况来处理此问题。

该标准没有指定此实现必须是什么,也没有对行为施加许多约束,调用前()后()是未定义的行为。有一个约束是array. start()==array.end()。由于约束不多,您希望不同的实现为其使用不同的解决方法。

Libc最初使用单个元素数组,但这不适用于非默认可构造类型。为了保持ABI兼容性,这被替换为相同大小的char数组。