Wie ruft man eine Funktion mit einem Verweis auf ein Array unbekannter Größe auf?

8

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%
  1. Warum akzeptiert die Sprache einen Verweis auf ein Array unbekannter Größe als gültiges Funktionsargument, während es keine direkte Möglichkeit gibt, eine solche Variable zu definieren?
  2. Gibt es bekannte Anwendungsfälle, in denen diese Syntax benötigt wird?
  3. Warum void by_reference(int (*&array), int size) sollte stattdessen nicht verwendet werden?
Vytis Valentinavičius 16.09.2013, 13:29
quelle

1 Antwort

6

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%     
nijansen 16.09.2013, 13:53
quelle

Tags und Links