Ja, es ist von C geerbt. Die Funktion:
void foo ( char a[100] );
Wird der Parameter als Zeiger angepasst und wird so:
void foo ( char * a );
Wenn Sie möchten, dass der Array-Typ erhalten bleibt, sollten Sie einen Verweis auf das Array übergeben:
void foo ( char (&a)[100] );
C ++ '03 8.3.5 / 3:
... Der Typ einer Funktion wird nach folgenden Regeln bestimmt. Der Typ jedes Parameters wird aus seiner eigenen Deklarationsspezifizierer-Sequenz und seinem eigenen Deklarator bestimmt. Nach dem Bestimmen des Typs jedes Parameters wird jeder Parameter vom Typ "Array von T" oder "Funktion, die T zurückgibt" so eingestellt, dass er "Zeiger auf T" bzw. "Zeiger auf Funktion, die T zurückgibt" ist ....
So erklären Sie die Syntax:
Suchen Sie in Google nach der Regel "rechts-links". Ich habe hier eine Beschreibung gefunden .
Es würde ungefähr wie folgt auf dieses Beispiel angewendet:
void foo (char (&a)[100]);
Beginnen Sie mit der Kennung 'a'
'a' ist a
Bewegen Sie sich nach rechts - wir finden eine, )
also kehren wir die Richtung um und suchen nach dem (
. Wenn wir uns nach links bewegen, gehen wir vorbei&
'a' ist eine Referenz
Nach dem &
erreichen wir die Öffnung, (
also kehren wir wieder um und schauen nach rechts. Wir sehen jetzt[100]
'a' ist eine Referenz auf ein Array von 100
Und wir kehren die Richtung wieder um, bis wir erreichen char
:
'a' ist eine Referenz auf ein Array von 100 Zeichen