2017-02-15 4 views
7

У меня есть функция поиска max, и я хочу отправить статический массив через ссылку, почему это невозможно?Передача со ссылкой на функцию шаблона

template <class T> 
T findMax(const T &arr, int size){...} 

int main{ 
    int arr[] = {1,2,3,4,5}; 
    findMax(arr, 5); // I cannot send it this way, why? 
    return 0; 
} 
+2

Пожалуйста, используйте 'int main()' (Замечание 'int' и'() ') –

+1

Только для объяснения, я согласен с int (я отредактирую его, спасибо). – Lea

ответ

7

Использовать правильный синтаксис. Изменить подпись:

template <class T, size_t size> 
T findMax(const T (&arr)[size]){...} 

Или вы можете использовать std::array аргумент для findMax() функции.

Live Example

Почему это не возможно?

const T &arr: Здесь arr является ссылкой типа T, а не ссылка на массив типа T, как вы могли бы подумать. Поэтому вам нужно [..] после arr. Но тогда он будет распадаться на указатель. Здесь вы можете изменить привязку с () и использовать const T (&arr)[SIZE].

Для получения дополнительной информации вы можете попробовать исследовать разницу между const T &arr[N] v/s const T (&arr)[N].

+1

Не могли бы вы рассказать о том, что вы сделали? Какой стандарт этот синтаксис? И будет ли он работать с любым массивом? – Lea

+0

Надеюсь, это станет понятным после редактирования. Надеюсь, это поможет вам. –

+0

'T & arr [N]' - массив ссылок [который является незаконным] (http://stackoverflow.com/questions/5460562/why-it-is-impossible-to-create-an-array-of-references -in-c), но 'T (& arr) [N]' является ссылкой на массив 'T', который является абсолютно допустимым. –

Смежные вопросы