c – 使用0长数组(或std :: array)是什么?

前端之家收集整理的这篇文章主要介绍了c – 使用0长数组(或std :: array)是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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一致.

猜你在找的C&C++相关文章