在libc中,std::array的特化
现场演示的区别:https://godbolt.org/z/1o167na6z
std::array
允许为零大小,但底层c数组不能为零大小。因此实现将需要一些特殊情况来处理此问题。
该标准没有指定此实现必须是什么,也没有对行为施加许多约束,调用前()
或后()
是未定义的行为。有一个约束是array. start()==array.end()
。由于约束不多,您希望不同的实现为其使用不同的解决方法。
Libc最初使用单个元素数组,但这不适用于非默认可构造类型。为了保持ABI兼容性,这被替换为相同大小的char
数组。