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