Что значит иметь std::array<int,0>
, массив нулевого размера?std :: массив нулевого размера
Вопросы, связанные с простым типом массива и языком C, я рассмотрел аналогичные вопросы в SO, и все эти вопросы касаются простого типа массива, а большинство из них говорит, что это незаконно. Но в C++ допускается array<int,0>
.
В соответствии с cppreference.com
Существует особый случай для массива нулевой длины (N == 0). В этом случае
array.begin() == array.end()
, что является некоторым уникальным значением. Эффект вызоваfront()
илиback()
на массив нулевого размера не определен.
Почему это не так незаконно?
Потому что шаблонный код может воспользоваться чем-то вроде этого. – sbabbi
Почему это должно быть незаконным? Мне было бы очень неприятно, если бы мне пришлось добавлять специальные коды к моему коду, чтобы избежать массива нулевого размера, вместо того, чтобы позволить 'array' обрабатывать этот случай очевидным образом. –
@MikeSeymour 'int x [0];' * is * незаконно. Я думаю, вопрос в том, почему разница. – Angew