13

在 C++11 中,它允许您创建一个0长度 C 数组,std:array如下所示:

int arr1[0];
std::array arr2<int,0>;
  1. 所以我在想一个没有空间存储的数组有什么用?
  2. 其次,什么是零长度数组?如果是指针,它指向哪里?
4

1 回答 1

21

您的第一个示例不是标准 C++,而是一个既允许又允许的扩展,它是灵活数组的版本,这个问题的答案是:灵活数组成员真的有必要吗?解释了此功能的许多优点。如果您使用-pedantic标志进行编译,您将收到以下警告:gccclanggcc

警告:ISO C++ 禁止零大小数组 'arr1' [-Wpedantic]

以及以下警告clang

警告:零大小数组是扩展 [-Wzero-length-array]

至于您的第二种情况,零长度std::array允许更简单的通用算法,而不必对零长度进行特殊情况,例如size_t类型的模板非类型参数。正如std::array 的 cppreference 部分所述,这是一种特殊情况:

零长度数组(N == 0)有一种特殊情况。在这种情况下,array.begin() == array.end(),这是一个独特的值。在大小为零的数组上调用 front() 或 back() 的效果是未定义的。

它还可以使其与其他也可以为空的序列容器保持一致。

于 2014-10-06T02:50:40.607 回答