Vedek Bareil
2003-08-29, 00:16:49
Ich hätte mal folgende Frage:
Wenn eine Funktion einen Wert zurückgibt, etwa so (T sei ein beliebiger Datentyp):
T func(/*...*/)
{
T y;
//..
return y;
}
//...
T x = func(/*...*/);
Wird dann der Inhalt von y direkt in x kopiert? Oder wird er erst als Rückgabewert von func zwischengespeichert und dann erst x zugewiesen, so daß zwei aufeinanderfolgende Kopiervorgänge anfallen?
Die Frage ist wichtig im Hinblick auf den Fall, daß T eine große Datenstruktur oder Klasse ist, die viel Speicherplatz benötigt und deren Kopieren merklich viel Zeit in Anspruch nimmt.
Würde es nach obiger Konstruktion tatsächlich zwei Kopiervorgänge geben, so wäre es dann performancemäßig ja besser, die Zuweisung folgendermaßen mittels Pointern zu realisieren:
void func(/*...*/, T *x)
{
T y;
//...
*x = y;
}
T x;
func(/*...*/, x);
Wenn eine Funktion einen Wert zurückgibt, etwa so (T sei ein beliebiger Datentyp):
T func(/*...*/)
{
T y;
//..
return y;
}
//...
T x = func(/*...*/);
Wird dann der Inhalt von y direkt in x kopiert? Oder wird er erst als Rückgabewert von func zwischengespeichert und dann erst x zugewiesen, so daß zwei aufeinanderfolgende Kopiervorgänge anfallen?
Die Frage ist wichtig im Hinblick auf den Fall, daß T eine große Datenstruktur oder Klasse ist, die viel Speicherplatz benötigt und deren Kopieren merklich viel Zeit in Anspruch nimmt.
Würde es nach obiger Konstruktion tatsächlich zwei Kopiervorgänge geben, so wäre es dann performancemäßig ja besser, die Zuweisung folgendermaßen mittels Pointern zu realisieren:
void func(/*...*/, T *x)
{
T y;
//...
*x = y;
}
T x;
func(/*...*/, x);