Const Referenzen teuer?
-
Ich habe gelesen, dass bei Funktionsaufruf mittels const Referenz das komplette Objekt übergeben wird (per Kopie).
Dann solltest du diese Quelle nicht mehr weiter beachten.
-
ich meine mich zu erinnern, dass es eine Referenz aber auch eine Kopie sein kann.
-
b7f7 schrieb:
ich meine mich zu erinnern, dass es eine Referenz aber auch eine Kopie sein kann.
Eine Referenz ist nicht kopierbar.
-
Shade Of Mine schrieb:
b7f7 schrieb:
ich meine mich zu erinnern, dass es eine Referenz aber auch eine Kopie sein kann.
Eine Referenz ist nicht kopierbar.
was ich mein ist 5.2.2 "Function call" ANSI final Draft Note 5.
"Where a parameter is of const reference type a temporary object is introduced if needed"
-
b7f7 schrieb:
was ich mein ist 5.2.2 "Function call" ANSI final Draft Note 5.
"Where a parameter is of const reference type a temporary object is introduced if needed"hast du auch code dazu? bin naemlich zu faul im standard nachzusehen was damit genau gemeint ist.
-
Hallo
ich denke, die Aussage bezieht sich nur darauf, das beim Aufruf der Funktion ein Zwischenspeicher für alle Werte erstelt wird, an die nichts zurückgegeben werden kann.
Beispiel :int foo(const int &Value) { return(Value); } int x() { return(1); } ... foo(x()); // Diese Konstellation ist gemeint
/Edit : Code berichtigt
bis bald
akari
-
akari schrieb:
ich denke, die Aussage bezieht sich nur darauf, das beim Aufruf der Funktion ein Zwischenspeicher für alle Werte erstelt wird, an die nichts zurückgegeben werden kann.
Daran habe ich auch gedacht, aber dennoch wird da kein temporaeres objekt wegen der referenz erstellt, sondern durch das return.
ich bin mir deshalb nicht sicher ob wirklich das gemeint ist. klingt aber am plausibelsten.
-
Hallo
wenn man mein Beispiel ausprobiert, ist tatsächlich alle sin Ordnung.
Erst wenn man das const entfernt, kommt die Warnung meines BCB :W8030 Temporäre Größe für Parameter 'Value' in Aufruf von 'foo(int &)' verwendet
So richtig kann sich die von b7f7 genannte Aussage nicht darauf beziehen, oder?
bis bald
akari
-
b7f7 schrieb:
was ich mein ist 5.2.2 "Function call" ANSI final Draft Note 5.
"Where a parameter is of const reference type a temporary object is introduced if needed"Schau dir mal folgendes Beispiel an
void foo(const std::string& s) { // blabla } int main() { foo("hallo"); }
Hier wird ein temporäres Objekt erzeugt, denn "hallo" ist kein std::string, sondern vom Typ char[6]. Der Compiler kann aber durch den entsprechenden ctor aus "hallo" einen std::string erzeugen.
-
groovemaster schrieb:
Schau dir mal folgendes Beispiel an
Ah, thx. Genau das ist es.
War wohl blind