Wieso "const" verwenden?
-
Okay, das ist natürlich ein gutes Argument. Ich lerne C/C++ ja noch und bin da noch nicht auf die Hilfe / Mitarbeit anderer angewiesen.
Danke,
Gruß
Squall
-
Trotzdem solltest du dir angewöhnen const-korrekten Code zu schreiben. Denn auch wenn nur du an einem Programm arbeitest, weißt du in 3 wochen vielleicht nichtmehr, dass du eine Variable heute konstant lassen wolltest und änderst sie dann doch... Const ist ein Konstrukt das dem Menschen hilft, besseren (vor allem sichereren) Code zu schreiben, und der Compiler unterstützt uns dabei, indem er meert wenn wir ein const objekt aus versehn ändern wollen.
-
Nachteile von const:
http://c2.com/cgi/wiki?AvoidConstCompletely
-
Bashar schrieb:
Nachteile von const:
http://c2.com/cgi/wiki?AvoidConstCompletelyDas ist aber POV und nicht technisch, bzw. einfach falsch, z.B. was „helping the compiler“ angeht.
-
Das ist ein Wiki.
-
Naja... Ich würd sagen const ist erst wirklich nötig geworden durch die Referenzen. Ich übergebe nunmal viele Werte per Referenz, damit es schneller geht, aber um sicher zu stellen, dass ich den Wert nur übergeben und er nicht verändert wird, nehme ich halt const.
Und das ist dann gut für die Sicherheit und die Lesbarkeit.
Mit Referenz verbindet man doch erstmal:
"Die Variable wird verändert",dabei verbindet man mit Referenz + Const:
"Die Variable wird nur übergeben und nicht verändert"
-
Bashar schrieb:
Das ist ein Wiki.
Hmm ja, aber wieso hast Du es kommentarlos gepostet? Ich befürchte einfach, dass es den OP verwirren könnte, weil es dem bisher gesagten direkt widerspricht.
-
Ist doch eine gute Sache. Es werden mögliche Nachteile von const erwähnt und es steht jeweils eine kurze aber aussagekräftige Diskussion dazu dabei. So kann sich jeder seine Meinung bilden und muß sich nicht auf das kollektive "const ist toll" verlassen.
-
Konrad Rudolph schrieb:
Hmm ja, aber wieso hast Du es kommentarlos gepostet? Ich befürchte einfach, dass es den OP verwirren könnte, weil es dem bisher gesagten direkt widerspricht.
Sind wir hier in der Kirche oder so? Genau deshalb hab ich es doch gepostet.
-
Bashar schrieb:
Konrad Rudolph schrieb:
Hmm ja, aber wieso hast Du es kommentarlos gepostet? Ich befürchte einfach, dass es den OP verwirren könnte, weil es dem bisher gesagten direkt widerspricht.
Sind wir hier in der Kirche oder so? Genau deshalb hab ich es doch gepostet.
Gut, ich gebe auf. Mich hat bloß der Titel des Eintrags total aus dem Ruder geworfen. Nach dem Titel erwartet jemand, der mit diesem Wiki nicht vertraut ist, nicht, dass der Titel in Wahrheit lauten müsste „Whether or not to avoid const“.
-
........... schrieb:
(D)Evil schrieb:
optimierung geb ich mal als Stichwort rein ...
Durch const werden Programme nicht schneller.
Oh doch, und wie. "const" ist fuer den Compiler eine unglaublich Grosse Hilfe bei Geschwindigkeitsoptimierungen. Ich hab schon Anwendungsfaelle gehabt, wo die Geschwindigkeit _MERKLICH_ (read: ~50%) gestiegen ist, nachdem ich im ganzen Programm wie wild alles "const" gemacht hab was nur ging.
-
Bashar schrieb:
Unlesbar. Wohl entstanden nach Lektüre von AvoidOrthographyCompletely.
-
Bashar schrieb:
Nachteile von const:
http://c2.com/cgi/wiki?AvoidConstCompletelyWenn man sich das mal genauer anschaut kommen dort zu jedem Nachteil, den const angeblich hat (schwarze Punkte), mehrere Gegenargumente (weisse Punkte)...
-
Blue-Tiger schrieb:
........... schrieb:
(D)Evil schrieb:
optimierung geb ich mal als Stichwort rein ...
Durch const werden Programme nicht schneller.
Oh doch, und wie. "const" ist fuer den Compiler eine unglaublich Grosse Hilfe bei Geschwindigkeitsoptimierungen. Ich hab schon Anwendungsfaelle gehabt, wo die Geschwindigkeit _MERKLICH_ (read: ~50%) gestiegen ist, nachdem ich im ganzen Programm wie wild alles "const" gemacht hab was nur ging.
"wie wild" irgendetwas tun ist kaum als Beleg geeignet. Schließlich kann const auch gelegentlich die Semantik verändern, wenn zum Beispiel const-Überladungen, die nicht genau das Gleiche machen (man denke etwa an basic_string+COW) im Spiel sind. Grundsätzlich erlaubt const - in den Grenzen der as-if-Regel - keine weitergehenden Optimierungen, als ohne const möglich sind, sofern beide Programme - bis auf diese Qualifikation - identisch sind. Natürlich sind praktisch Unterschiede denkbar, denn reale Compiler sind ja nicht perfekt - ich habe aber große Zweifel, dass man hier generell von einem Vorteil von const ausgehen sollte.
So oder so dient const einer inhaltlichen Aussage und nicht der Optimierung, folglich ist seine unterschiedslose Verwendung überall, wo es möglich ist, genauso falsch wie der völlige Verzicht es ist.
-
ProgChild schrieb:
Naja... Ich würd sagen const ist erst wirklich nötig geworden durch die Referenzen. ...
Nunja ... für Zeiger halte ich es aber für genauso hilfreich und für Memberfunktionen sowieso.
Es erlaubt einfach eine genauere Schnittstellenpezifikation, weil nicht nur gesagt werden kann: "Ich benutze/liefere ein x", sondern "Ich benutze/liefere ein x, das ich aber nicht verändere/du aber nicht verändern darfst".
Ist wie mit aussagekräftigen Namen: KANN man verwenden, MUSS man aber nicht.Gruß,
Simon2.
-
'const' kann helfen, speicherplatz zu sparen. auf systemen mit wenig RAM könnten 'const'-objekte im (grösseren) ROM/Flash etc. abgelegt werden, weil nur lesend darauf zugegriffen wird.
-
Außerdem const du mal ein Bier holen.
SCNR
-
Hmm ... und wie wollt ihr ohne const bitte die Direkte Eingabe von z.B. "Zeichenkette" zulassen?
-
in dem man das const weglässt, und einfach so damit arbeitet.
-
const-freak schrieb:
'const' kann helfen, speicherplatz zu sparen. auf systemen mit wenig RAM könnten 'const'-objekte im (grösseren) ROM/Flash etc. abgelegt werden, weil nur lesend darauf zugegriffen wird.
das hilft einem aber weder bei const-referenzen, noch bei const-members... also eigentlich nur bei globalen Konstanten.