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.
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.
Nicht sicher, ob es das ist, wonach Sie gefragt haben, aber vielleicht ist es das, wonach Sie gesucht haben
%Vor%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 wirdNach 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%