Я учусь C++, и мой учебник (C++ праймер) предлагает следующий пример:возвращает ссылку на массив против указателя на массив
int odd[] = {1,3,5,7,9};
int even[] = {0,2,4,6,8};
// returns a pointer to an array of five int elements
auto arrPtr(int i) -> int(*)[5]
{ return (i%2) ? &odd : &even;}
и как exerices требующего, чтобы изменить функцию так, чтобы он возвращает ссылку на массив:
auto arrPtr(int i) -> int(&)[5]
{ return (i%2) ? odd : even;}
то, что я не понимаю, почему вы должны вернуть объект массива, чтобы преобразовать его в ссылку на этот массив (если я понять код правильно). Не должен ли адрес памяти массива «идеально соответствовать» в ссылочном типе?
Нет, ссылка не является адресом. Это псевдоним для существующего объекта. – juanchopanza
Поскольку ссылка на T инициализируется с использованием объекта типа T, а не указателя на T. – user657267
Просто добавьте это: 'template operator T & (T * j) {return * j; } '(Шутки. На самом деле этого не делаете.) –