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:
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 ...
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.
Tags und Links arrays c++ templates-deduction