0长度数组(或std :: array)的用途是什么?

Nay*_*iya 11 c++ arrays stdarray

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

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

Sha*_*our 17

你的第一个例子不是标准的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()对零大小数组的影响是未定义的.

它还可以使其与其他序列容器一致,也可以是空的.