verwendet man in C++ eigentlich überhaupt noch "normale" Argumente?
-
Hi
Verwendet man eigentlich noch "normale" Argumente wie func(int a, int b), oder nur noch func(const int& a, const int& b) und Pointer?
Ich denke mal, dass es trotzdem in dieses Unterforum passt, naja, wenn nicht, sorry.
-
die Übergabe von const-Referenzen macht nur Sinn, wenn man das Objekt danach nicht kopiert und wenn es sich um nicht triviale Datentypen handelt. Daher ist die Übergabe von konstanten int-Referenzen schwachsinnig.
-
blöde Frage: warum?
-
Weil ints zu klein sind, als dass sich das lohnen würde

Wenn die Funktion nicht geinlined wird, dann werden die konstanten Referenzen als Zeiger implementiert. Und die sind (abgesehen davon, dass man für den Zugriff dereferenzieren muss) ähnlich groß wie ints, manchmal sogar größer.
-
Gastaccount schrieb:
Verwendet man eigentlich noch "normale" Argumente wie func(int a, int b), oder nur noch func(const int& a, const int& b) und Pointer?
Es war schon häufiger in den ein oder anderem Post der letzten Zeit ein Thema:
ja, man setzt in C++ auch "normale" Argumente als Parameter ein. Dabei sollte man aber grundsätzlich Call-By-Value auf integrale Datentypen begrenzen (int, bool, double...) die der Compiler von Haus aus kennt, und wohl am besten weiß wie er damit umgehen soll (zudem Referenzen/Zeiger hierbei ein unnötiger "Overhead" wären). Ausnahmen sind hierbei natürlich solche Parameter die verändert werden sollen hier musst du auch hier immer auf Referenzen bzw. Zeiger (wenn NULL zulässig sein soll) zurückgreifen.
Bei allen Objekten sollte man aber grundsätzlich auf Referenzen/Zeiger zurückgreifen, da Call-By-Value immer ein kopieren bedeutet. Im Gegensatz zu integralen Datentypen kann das Kopieren aber durchaus sehr aufwändig sein, so das man lieber eine Indirektion (Referenz/Zeiger) als eine Kopie in Kauf nimmt. Davon abgesehen ist jede Kopie eine Potentielle Fehlerquelle so das man hier noch einen weiteren Grund hat.
Und das man die als const deklariert dient u.a. dafür das man anzeigt das die Funktion/Methode den Wert nicht ändert. Zudem kann der Compiler auch eher bei Verwendung konstanter Übergaben optimieren.
cu André
-
Gastaccount schrieb:
Hi
Verwendet man eigentlich noch "normale" Argumente wie func(int a, int b), oder nur noch func(const int& a, const int& b) und Pointer?
Ich denke mal, dass es trotzdem in dieses Unterforum passt, naja, wenn nicht, sorry.
call-by-value verwendet man wahrscheinlich sogar öfter als gedacht (erwünscht?). man siehe sich nur die standardcontainer mit ihrer copy-semantik an.