Теперь, когда у нас есть std::array
, std::vector
и инициализация скобки, нужны ли массивы C-стиля?Насколько жизнеспособны альтернативы массивам C-стиля?
ответ
Одна вещь, что массивы C-стиля все еще хранятся над std::array
: размер вычета. Вы можете выполнить следующие действия с массивами C-стиле, but not really with std::array
:
int arr[] = {1,2,3,4,5}; // no explicit size
Теперь у нас есть еще один кандидат для замены массивов C-типа: std::initializer_list
. Внутри она опирается на какой-то массив типа хранения, но наблюдать:
#include <initializer_list> // needed
// ...
auto list = {1,2,3,4,5}; // no explicit size, and no explicit type!
И decltype(list) == std::initializer_list<int>
. Однако в настоящее время вы не можете запросить размер или элементы такого std::initializer_list
во время компиляции, так как функции-члены не помечены constexpr
(пока они исправлены в C++ 14). Кроме того, еще большая проблема: std::initializer_list
предоставляет только const
-access для элементов, поэтому вы не можете их мутировать.
Но предостережение: std::initializer_list
s имеет ссылочную семантику, и если они возвращены из функции, у вас будет болтающаяся ссылка на какое-либо хранилище.
В конце концов, я бы сказал, что в некоторых узких ситуациях и нишах все еще есть место для массивов С-стиля, но в общем случае у нас есть лучшие варианты, доступные сейчас с std::array
и std::initializer_list
.
Спасибо, хороший ответ! поэтому, если я правильно понимаю, когда во время компиляции можно будет запрашивать размер 'initializer_list', даже это преимущество исчезнет? Я думаю, вы можете затем создать функцию шаблона, чтобы вернуть std :: array и вычесть размер, не так ли? – JohnnyW
- 1. Насколько медленны курсоры и какие альтернативы лучше?
- 2. Ошибка: не жизнеспособны перегруженный оператор []
- 3. C++ список, не жизнеспособны преобразование из 'value_type'
- 4. вектор <bool> не жизнеспособны перегружен '='
- 5. Альтернативы широко распространенному использованию директивы @synchronized на доступ к изменяемым массивам
- 6. Насколько надежным является HTTP_REFERER?
- 7. Декартовы по NULL-массивам
- 8. Назначение памяти массивам
- 9. Доступ к массивам динамически
- 10. Доступ к массивам matlab
- 11. Итерация по многомерным массивам
- 12. Соответствие Java различным массивам
- 13. Назначение многоуровневым структурированным массивам
- 14. Отвращение C к массивам
- 15. Назначение строк массивам символов
- 16. JSON массивам Python
- 17. совмещающих 2D Массивам
- 18. Итерирование по массивам numpy
- 19. Доступ к массивам
- 20. Зацикливание по массивам
- 21. Выполнение расчетов по массивам
- 22. Dot нотации к массивам
- 23. MYSQL Поиск по массивам
- 24. Соответствие ячеек массивам
- 25. Ruby, добавляемый к массивам
- 26. Назначение значений динамическим массивам
- 27. Альтернативы сокетам
- 28. Альтернативы @ ""?
- 29. JS валидатор альтернативы JSLint?
- 30. Насколько надежны NSUserDefaults?
Нет, они не являются. –
@ AndyProwl Вы могли бы уточнить: какие возможные варианты использования? – JohnnyW
@JohnnyW: Что вы думаете о 'std :: array'? –