String übergeben
-
Hallo,
wieso übergibt man einen String so an eine Funktion:void sfun(const string& astring){...}sfun("Test");könnte man nicht auch
void sfun(string& astring){...}bzw.
void sfun(string astring){...}verwenden?
-
Das sind einfach unterschiedliche Typen.
Das erste ist ja eine const Referenz. Du kannst also innerhalb der Funktion lediglich lesend auf den String zugreifen.
Beim zweiten kannst du den übergebenen string verändern, da es eine Referenz auf den ist.
Das dritte ist einen Kopie des strings. Man kann den string zwar verändern, das hat allerdings keinen Einfluss auf den string, den du beim Aufruf übergibst, da der zuerst ja kopiert wird und du veränderst dann lediglich die Kopie. (die erste Variante kann als einen schnelleren Ersatz für die dritte Variante gesehen werden, da es von aussen gesehen die gleiche Auswirkung hat).
-
void sfun(string& astring){...}Das schließt
sfun("test")aus, weil der string veränderbar sein muss.void sfun(string astring){...}Dabei wird einmal unnötig kopiert.
-
Jedoch muß bei Aufruf von sfun("test") sowieso ein temporäres string-Objekt erstellt werden, so daß moderne Compiler dann die zusätzliche Kopie bei "string astring" wegoptimieren können, d.h. de facto sind dann "const string &" und "string" gleich.