Der Unterschied zwischen int a [5] und int (& a) [5] in der Vorlagenparameterableitung

8

Diese Frage bezieht sich auf Funktionen, die Arrays mit statisch bekannter Größe verwenden.

Nehmen Sie zum Beispiel das folgende Minimalprogramm:

%Vor%

Bei der Ausführung wird das erwartete Ergebnis ausgegeben:

%Vor%

Wenn ich jedoch versucht habe, dass mein Compiler (VS 2010) die 5 ableitet, wird could not deduce template argument for 'int [n]' from 'int [5]' .

Ein bisschen Nachforschung führte zu dem aktualisierten arrfun_b , wo die Schablonenparameterableitung funktioniert:

%Vor%

Das Ergebnis des Programms ist das gleiche, ob arrfun_a oder arrfun_b aufgerufen wird.

Bisher ist der einzige Unterschied, den ich gefunden habe, ob der Template-Argumentabzug funktioniert und ob es möglich ist, die Funktion mit einem N aufzurufen, das nicht 5 ist ...

    
gha.st 08.05.2012, 19:34
quelle

2 Antworten

14

Der Compiler ändert automatisch den Typ des Funktionsarguments int a[N] in int *a und verliert damit die Größe des Arrays. int(&a)[5] ist wirklich eine Referenz auf ein Array der Größe 5 und kann kein Array irgendeiner anderen Größe übergeben werden.

    
Mark Ransom 08.05.2012, 19:37
quelle
1

Ich denke, es ist der Unterschied zwischen einer Referenz und einem Zeiger.

arrfun_a übergibt einen Zeiger an int.

arrfun_b übergibt einen Verweis auf ein Array von Ints.

    
Julian 08.05.2012 19:39
quelle

Tags und Links