Re: интерпретация T (&array)[size] в шаблонах
От: Сыроежка  
Дата: 21.12.11 19:26
Оценка: 2 (1) +1
Здравствуйте, pofig, Вы писали:

P>Салют.

P>Объясните плиз как следует понимать конструкцию
P>
P>T (&array)[length]
P>

P> используемую в шаблонах:
P>
P>template<typename T, int length>
P>void function(T (&array)[length]) {}
P>

P>Для чего она нужна понятно, а вот что физически происходит и почему нужно писать именно так
P>не ясно. Для чего обязательно амперсанд и скобочки?

Таким образом задается ссылка на массив. В данном случае & — это спецификатор ссылки. В С++ массив в функции можно передавать двумя способами. Если в функции параметр объявлен как массив, например, void f( int a[] ), то при передаче массива имя массива преобразуется в указатель на первый элемент массива. А если вы объявили ссылку на массив в качестве параметра void f( int ( &a )[10] ); то в функцию передасться ссылка на массив. То есть внутри функции вы получите алиас вашего исходного массива, который был задан в качестве аргумента при вызове функции. При этом вся информации о массиве будет сохранена.

Сравните два выражения, которые, допустим, присутствуют в теле указанных функция:
первая функция sizeof( a );
вторая функция sizeof( a );

Длля первой функции резальтат работы оператора будет равен 4 (на 32 битовой платформе) , то есть размеру указателя, так как в первой функции массив, заданный в качестве аргумента функции преобразуется в указатель на первый элемент массива.
Во второй функции результат работы оператора будет равен 40, так как во второй функции вы имеете дело с самим исходным массивов, заданным алиасом, указанным в качестве имени параметра.
Меня можно встретить на www.cpp.forum24.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.