Обычно я использую std::vector
и хотел бы перейти по ссылке const. Тем не менее, если мой api может в какой-то момент быть вызван c-кодом, использование pass by const-указателя может иметь смысл, хотя вам также необходимо отправить размер. Если функцию можно вызвать с помощью std::array
или std::vector
, вы можете решить отправить указатель (и размер) или набор итераторов (начало/конец).
Если мы говорим об использовании std :: array, аргумент шаблона требует размера массива. Это означало бы в нормальной функции, вам нужно фиксированный размер:
void myfunc(const std::array<int, 5>& mydata){...}
Однако, если мы делаем шаблонную функцию, шаблонизации по размеру, что больше не является проблема.
template<unsigned int SZ>
void myfunc(const std::array<int, SZ>& mydata) {...}
Если мы говорим о стеке выделяются массивы с стилем ... Хороший C++ стиль предпочесть станд :: массив/зЬй :: вектора для массивов с стилем. Я бы рекомендовал прочитать C++ Coding Standard by Herb Sutter глава 77 на стр. 152 о предмете. При использовании массивов c-стиля отправкой указателя и размера является стандартный способ перехода.
! Не будет ли приниматься динамически выделенный массив в качестве параметра для передачи по ссылке? Как так? Ссылка - это, в конце концов, псевдоним. – quantum231
@ quant231 Динамическое выделение массива уже возвращает указатель, поэтому нет. –
Существует не требование автоматического распределения, но есть проблема с типом. Пример: 'void f (int (& arg) [5]);' 'void g() {f (* new int [1] [5]);}' –