Что такое использование массива 0-length (или std:: array)?
В C++11 это позволяет создать 0
длина массива C и std:array
такой:
int arr1[0];
std::array arr2<int,0>;
- Итак, я думаю, что такое использование массива, у которого нет места для хранения?
- во-вторых, что массив нулевой длины? Если это указатель, то куда он указывает?
1 ответов
ваш первый пример не является стандартным C++, но является расширение оба gcc
и clang
разрешить, это версия гибкие массивы и ответ на вопрос: действительно ли необходимы гибкие члены массива? объясняет многие преимущества этой функции. Если вы скомпилированы с помощью -педантичный флаг вы бы получили следующее предупреждение в gcc
:
предупреждение: ISO C++ запрещает нулевой размер массив ' arr1 '[- Wpedantic]
и следующее предупреждение в clang
:
предупреждение: массивы нулевого размера являются расширением [- wzero-length-array]
Что касается вашего второго случая нулевой длины std::array
позволяет более простые общие алгоритмы без необходимости специального случая для нулевой длины, например, параметр шаблона типареализация. Как раздел cppreference для std:: array Примечания это особый случай:
существует особый случай для массива нулевой длины (N == 0). В таком случае, массив.begin () = = массив.end (), что является некоторым уникальным значением. Эффект вызова front() или back () для массива нулевого размера не определен.
Это также сделает его совместимым с другими контейнеры последовательности, которая также может быть пустой.