C ++ - Funktion gibt den Verweis auf das Array zurück

7

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:)

    
Jaege 23.12.2015, 15:50
quelle

4 Antworten

10
  

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.

%Vor%     
juanchopanza 23.12.2015, 16:11
quelle
11

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.

    
Slava 23.12.2015 16:05
quelle
0

Einige Alternativen, die ich denke, sind ab C ++ 14 besser:

Auto- und Array-Referenz nachgestellter Rückgabetyp:

%Vor%

Dekltyp (automatisch):

%Vor%

Beispielverwendung:

%Vor%     
Ricky65 08.10.2017 11:42
quelle
0

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) ...

    
Dusan Jovanovic 05.03.2018 13:56
quelle

Tags und Links