在 C++11 中,它允许您创建一个0
长度 C 数组,std:array
如下所示:
int arr1[0];
std::array arr2<int,0>;
- 所以我在想一个没有空间存储的数组有什么用?
- 其次,什么是零长度数组?如果是指针,它指向哪里?
您的第一个示例不是标准 C++,而是一个既允许又允许的扩展,它是灵活数组的版本,这个问题的答案是:灵活数组成员真的有必要吗?解释了此功能的许多优点。如果您使用-pedantic标志进行编译,您将收到以下警告:gcc
clang
gcc
警告:ISO C++ 禁止零大小数组 'arr1' [-Wpedantic]
以及以下警告clang
:
警告:零大小数组是扩展 [-Wzero-length-array]
至于您的第二种情况,零长度std::array
允许更简单的通用算法,而不必对零长度进行特殊情况,例如size_t类型的模板非类型参数。正如std::array 的 cppreference 部分所述,这是一种特殊情况:
零长度数组(N == 0)有一种特殊情况。在这种情况下,array.begin() == array.end(),这是一个独特的值。在大小为零的数组上调用 front() 或 back() 的效果是未定义的。