Cpp Fragen
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Allgemeines

Analog zu CeeFragen soll hier eine Sammlung interessanter Fragen (und der (richtigen) Antworten) zusammengestellt werden.

Fragen

Arrays als Rückgabetyp

Verbesserungen und Kommentare gerne gesehen. So ganz bin ich mir noch nicht sicher, daß das die optimale Lösung ist. -- DavidSchmitt

Weder in TheCppProgrammingLanguage, noch in der ClcFAQ habe ich sinnvolles zu Arrays als Rückgabetyp gefunden.

int a();        // geht (klar)
int[] b();      // Syntax error (auch noch klar)
int c()[];      // Fehler: 'c declared as function returning an array'
int *d();       // geht

Also geht es nicht. Kann mir vielleicht noch wer erläutern warum nicht?

Nach dem Studium genereller Fragen zu Arrays in der ClcFAQ (speziell ClcFAQ:6.2) ist es klar, daß die Rückgabe eines (statisch allozierten) Arrays zu unnötigem Herumkopieren dessen Inhalts führen würde und daher nicht sinnvoll ist.

Schade, da man dadurch zum Beispiel nicht
int c()[4];
schreiben kann. Und mit
int *c();
die Typsicherheit der ersten Deklaration verliert.

Aber man kann

typedef int (*POINTER_TO_int_ARRAY)[4];

POINTER_TO_int_ARRAY d();

schreiben. Was zwar garausam aussieht, aber etwa das aussagt, was ich gesucht habe: "Diese Funktion gibt [einen Pointer auf] ein Array mit vier ints zurück."


Sie gibt einen Pointer zurück. "Array zurückzugeben" bedeutet, dass das Array auf dem Stack liegt und von der Funktion gefüllt wird.


Ja. Stimmt auffallend. Im Endeffekt lasse ich jetzt das Array vorher allozieren und mache alles ByReference. Ungefähr so:

class beispiel
{
  public:
  void getData(int data[9]);
}

int *array = new int[9];
getData(array);


KategorieCpp
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 14. August 2002 17:15 (diff))
Suchbegriff: gesucht wird
im Titel
im Text