Betrachten Sie einen gültigen Code:
%Vor%Diese Funktion akzeptiert ein Array als Argument, und der Compiler kann die Größe des Arrays mithilfe der Template-Argumentableitung herleiten.
Jetzt ist es gültig (getestet auf Apple Clang Version 3.0), eine solche Funktion zu definieren:
%Vor% Was (sollte) einen Verweis auf ein Array unbekannter Größe als Argument akzeptieren. Beachten Sie, dass int[]
und int[n]
unterschiedliche Typen sind und im Allgemeinen inkompatibel sind.
Der einzige Weg, wie ich diese Funktion aufgerufen habe, ist:
%Vor%void by_reference(int (*&array), int size)
sollte stattdessen nicht verwendet werden? Ihre Annahme ist falsch, das Programm ist schlecht geformt. Siehe C ++ 11 Standard 8.3.5 / 8:
Wenn der Typ eines Parameters einen Typ der Form "Zeiger auf ein Array unbekannter T-Grenze" oder "Referenz" enthält zum Array der unbekannten Grenze von T, "das Programm ist schlecht gebildet.
clang erlaubt dies als Compiler-Erweiterung. g ++, zum Beispiel, wird es nicht akzeptieren.
Sie können jedoch Vorlagen verwenden, um die Größe des übergebenen Arrays abzuleiten:
%Vor%