2016-06-21 5 views
0

Dies ist in Bezug auf den ersten formalen Parameter in this Frage.Kann jemand diese Syntax erklären? T (& arr) [arrsize] vs T & arr [arrsize]

HINWEIS: T und arrsize werden hier als Vorlagenparameter übergeben.

T (&arr)[arrsize] scheint eine Art Besetzung zu sein, aber zu was ich nicht sicher bin. &arr ist kein Typname, sondern nur ein formaler Parametername mit einem Referenzsymbol daneben. Warum sollte man nicht einfach T* arr[] setzen? Darüber hinaus war ich nicht der Ansicht, dass es in einer Sprache, die das Überladen von Funktionen implementiert, möglich war, in eine formale Parameterliste oder Nötigung zu kommen. (das führt Mehrdeutigkeit in Funktionsaufrufen ein). Ich nehme an, Template-Funktionen führen zu nützlicher Mehrdeutigkeit, also ist das Casting in diesem Kontext erlaubt - unter der Annahme, dass zwei Template-Funktionen nicht die gleiche Signatur haben, abgesehen vom Casting?

Wenn diese Vorlage instanziiert wird, welcher Typ wird dieses Argument? Ist es ein Zeiger oder ein Verweis auf ein statisches Array? einfach T*; oder etwas anderes?

Antwort

2
T (&arr)[arrsize] 

Bei Verwendung in einem Funktionsparameter deklariert eine Variable mit dem Namen arr eine Referenz auf ein Array vom Typ T mit der Größe arrsize. Dies ist eine Möglichkeit, ein Array an eine Funktion zu übergeben und nicht in einen Zeiger zu zerfallen. Sie können das Array in der Funktion verwenden, so wie Sie es in dem Bereich, der Sie erklären es in.

T& arr[arrsize] 

sind ein Array von Referenzen, die nicht gemäß der Norm erlaubt. Es sollte ein Compilerfehler sein.

2

T& arr[arrsize]: arr ist ein Array (der Größe Arraysize) von T& ‚s (, die in C++ illegal ist)

T (&arr)[arrsize]: arr eine Referenz auf ein Array (der Größe Arraysize) von T ‚s

+0

Array von '' 'T'''s wahrscheinlich – alexeibs

+0

Oh danke," Copy-Paste "-Fehler –