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 schreiben kann. Und mit 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))