Нет, параметр функции является ссылкой на массив Len
const символов. Вот как функция знает длину (при условии, что последний байт является NUL-терминатором, следовательно, -1). Скобки предназначены именно для того, чтобы это не было так, как вы думаете.
На самом деле в C ++ нет такого понятия, как массив ссылок, поэтому он не может быть тем, о чем вы думаете, даже без паренов. Я предполагаю (но не уверен), что необходимость в паренонах нужна только для согласованности с другими аналогичными определениями типов, такими как указатели на массивы:
void fn(const char *a[3]); // parameter a is of type const char**, the 3 is ignored.
void fn(const char (*a)[3]; // parameter a is a pointer to an array of 3 const chars.
Этот пример также показывает, почему массив не является указателем. Спрогнозируйте вывод следующей программы и запустите ее:
#include <iostream>
void fn(const char (*a)[3]) {
std::cout << sizeof(a) << "\n" << sizeof(*a) << "\n";
}
void fn2(const char *a[3]) {
std::cout << sizeof(a) << "\n" << sizeof(*a) << "\n";
}
int main() {
const char a[3] = {};
const char **b = 0;
fn(&a);
fn2(b);
}
#if 0
// error: declaration of `a' as array of references
void fn3(const char & a[3]) {
std::cout << sizeof(a) << "\n" << sizeof(*a) << "\n";
}
#endif