Как вызвать функцию со ссылкой на массив неизвестного размера?
Рассмотрим действительный код:
template
void by_numbered_reference(int (&array)[size]);
Эта функция принимает массив в качестве аргумента, и компилятор может определить его размер с помощью вывода аргумента шаблона.
Теперь допустимо (протестировано на Apple clang версии 3.0) определить такую функцию:
void by_reference(int (&array)[], int size);
Который (должен) принять ссылку на массив неизвестного размера в качестве аргумента. Отмечая чтоint[]
а такжеint[n]
являются различными типами и, как правило, несовместимы.
Единственный способ, который я нашел, как вызвать эту функцию:
int * array;
by_reference(reinterpret_cast(*array), array_size);
Почему язык принимает ссылку на массив неизвестного размера в качестве допустимого аргумента функции, в то время как нет простого способа определить такую переменную?Известны ли случаи использования этого синтаксиса?Зачемvoid by_reference(int (*&array), int size)
долженне использовать вместо этого?