Да, это унаследовано от C. Функция:
void foo ( char a[100] );
Параметр будет настроен на указатель, и он станет таким:
void foo ( char * a );
Если вы хотите, чтобы тип массива был сохранен, вы должны передать ссылку на массив:
void foo ( char (&a)[100] );
C ++ '03 8.3.5 / 3:
... Тип функции определяется по следующим правилам. Тип каждого параметра определяется его собственным описанием-описателем-декларатором и декларатором. После определения типа каждого параметра любой параметр типа «массив T» или «функция, возвращающая T» корректируется как «указатель на T» или «указатель на функцию, возвращающую T» соответственно ....
Чтобы объяснить синтаксис:
Проверить в Google правило "право-лево"; Я нашел одно его описание здесь.
К этому примеру это применимо примерно так:
void foo (char (&a)[100]);
Начать с идентификатора "а"
'a' is a
Двигайтесь вправо - мы находим )
, поэтому мы меняем направление в поисках (
. Двигаясь влево, мы проходим &
'а' - это ссылка
После &
мы достигаем отверстия (
, так что мы снова разворачиваемся и смотрим направо. Теперь мы видим [100]
'a' - это ссылка на массив из 100
И мы снова меняем направление, пока не достигнем char
:
'a' - это ссылка на массив из 100 символов
person
Richard Corden
schedule
25.08.2009