加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:15:13 所属栏目:百科 来源:网络整理
导读:在C 11中,它允许您创建一个0长度的C数组和std:数组,如下所示: int arr1[0];std::array arr2int,0; 所以我在想,没有空间存储的数组的用法是什么? 其次是零长度数组是什么?如果它是一个指针,它指向哪里? 解决方法 您的第一个例子不是标准的C,而是gcc和cla
在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一致.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读