在C 11中,它允许您创建一个0长度的C数组和std:数组,如下所示:
int arr1[0]; std::array arr2<int,0>;
>所以我在想,没有空间存储的数组的用法是什么?
>其次是零长度数组是什么?如果它是一个指针,它指向哪里?
解决方法
您的第一个例子不是标准的C,而是gcc和clang允许的
an extension,它是
flexible arrays的版本,这个
answer to the question: Are flexible array members really necessary?解释了这个功能的许多优点.如果您使用
-pedantic标记编译,您将在gcc中收到以下警告:
warning: ISO C++ forbids zero-size array ‘arr1’ [-Wpedantic]
以及以下警告:
warning: zero size arrays are an extension [-Wzero-length-array]
对于第二种情况,零长度std :: array允许更简单的通用算法,而不需要为零长度的特殊情况,例如size_t类型的模板非类型参数.由于cppreference section for std::array注意到这是一个特例:
There is a special case for a zero-length array (N == 0). In that case,array.begin() == array.end(),which is some unique value. The effect of calling front() or back() on a zero-sized array is undefined.
它也将使其与其他sequence containers也可以是empty一致.