übergibt ein Array als Const-Argument einer Methode in C ++

7

Ich möchte in der Lage sein, ein const Array-Argument an eine Methode in C ++ zu übergeben.

Ich weiß, dass wenn Sie ein Array an eine Methode übergeben, es dasselbe ist, als wenn Sie einen Zeiger auf das erste Element des Arrays übergeben, so ist es einfach, den Zeiger zu verwenden.

%Vor%

Aber ein Array ist manchmal besser, Sie können zum Beispiel die Größe des Arrays schreiben.

    
Kevin MOLCARD 18.07.2012, 14:25
quelle

4 Antworten

14

Sie können eine Vorlage verwenden, die die Array-Größe verwendet: Ссылка

%Vor%

BEARBEITEN: Eine Möglichkeit, Code Bloat zu vermeiden, wäre eine Funktion, die einen Zeiger und eine Größe benötigt, die die eigentliche Arbeit erledigt:

%Vor%

und eine triviale Vorlage, die es aufruft, die leicht inline wird.

%Vor%

Natürlich müssen Sie einen Weg finden zu testen, dass dies immer inline ist, aber Sie bekommen die Sicherheit und Benutzerfreundlichkeit. Selbst in den Fällen, in denen es nicht ist, erhalten Sie die Vorteile für relativ geringe Kosten.

    
BoBTFish 18.07.2012, 14:32
quelle
5

Nicht sicher, ob es das ist, wonach Sie gefragt haben, aber vielleicht ist es das, wonach Sie gesucht haben

%Vor%     
Desmond Hume 18.07.2012 14:38
quelle
4

Per 3.9.3: 2

  

Alle auf einen Array-Typ angewendeten cv-Qualifizierer beeinflussen den Array-Elementtyp, nicht den Array-Typ (8.3.4).

und 8.3.4: 1

  

Beliebig   Typ der Form "cv-Qualifier-Seq-Array von N T" wird auf "Array von N cv-Qualifier-Seq T" eingestellt, und ähnlich für   "Array der unbekannten Bindung von T".

Siehe auch 8.3.5: 5

  

Nachher   Bestimmen des Typs jedes Parameters, irgendein Parameter vom Typ "Array von T" oder "Funktion, die T zurückgibt" ist   eingestellt, um "Zeiger zu T" oder "Zeiger zur Funktion zu sein, die T," zurückbringt.

Das bedeutet, dass der Parametertyp innerhalb einer Funktion, die einen Array-Parameter annimmt, tatsächlich ein Zeiger ist, und wegen 3.9.3: 2 ist der Zeiger nicht cv-qualifiziert:

%Vor%

Dies hat keine Auswirkungen auf den Typ der Funktion selbst, da eine andere Klausel in 8.3.5: 5

verwendet wird
  

Nach dem Erstellen der Liste   Von den Parametertypen werden alle übergeordneten cv-Qualifizierer, die einen Parametertyp modifizieren, bei der Bildung der Parameter gelöscht   Funktionstyp.

Wenn Sie also ein Array mit cv-Qualifikationsmerkmalen übergeben möchten, muss als Referenz verwendet werden:

%Vor%     
ecatmur 18.07.2012 14:58
quelle
3

Wenn Sie die Größe des Arrays benötigen:

%Vor%     
Torsten Robitzki 18.07.2012 14:29
quelle

Tags und Links