Gibt es eine andere Möglichkeit, einen Verweis auf ein Array von der Rückgabe der Funktion zu erhalten, außer mit einem Zeiger?
Hier ist mein Code.
%Vor%Und eine Klassenversion.
%Vor% Hinweis: Das const
-Qualifikationsmerkmal wird im Code nicht angegeben.
Ich weiß, dass der Name des Arrays ein Zeiger auf das erste Element in diesem Array ist, daher ist die Verwendung eines Zeigers zum Empfangen völlig lebensfähig.
Entschuldigung, ich habe einen Fehler gemacht. Von Array-zu-Zeiger-Zerfall
Es gibt eine implizite Konvertierung von lvalues und rvalues des Array-Typs in rvalues des Zeigertyps: Es wird ein Zeiger auf das erste Element eines Arrays erstellt.
Bitte ignorieren Sie das XD
Ich bin nur neugierig auf die Frage, die ich am Anfang gestellt habe:)
Gibt es eine andere Möglichkeit, einen Verweis auf ein Array von der Rückgabe der Funktion zu erhalten, außer mit einem Zeiger?
Ja, einen Verweis auf ein Array verwenden, wie bei jedem anderen Typ:
%Vor% Um die klobige Syntax zu vermeiden, könnten Sie stattdessen typedef
verwenden.
Sie sollten std :: array verwenden, um Verwirrung zu vermeiden und saubereren, sichereren und weniger klobigen Code zu erstellen :
%Vor%Ich weiß, dass der Name des Arrays ein Zeiger auf das erste Element in diesem Array ist
Das ist falsch, Array kann implizit in einen Zeiger auf das erste Element konvertiert werden. Es ist nicht das Gleiche.
In Kompilierungssituationen ist diese Frage sehr gültig. Betrachten Sie diese constexpr-Funktion:
%Vor%Die Verwendung erfordert declltype (auto) idiom:
%Vor%Ohne decltype (auto) würden wir das Zerfallen des Arrays in den Zeiger zulassen. Oben kompiliert mit msvc (spätestens ab 2018MAR05). Aber nicht mit GCC neuesten (C ++ 2a) ...