Wieso "const" verwenden?
-
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.
-
camper schrieb:
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.Ich bin sehr wohl der Meinung, dass const ueberall dort verwendet werden sollte, wo es verwendet werden kann (ohne dass dabei die Semantik veraendert wird).
Es ist in der Tat eine inhatliche Aussage, allerdings eine, die auch der Compiler versteht, von daher kann ich mir schon vorstellen, dass aus diesem Plus an Informationen auch was nuetzliches Abgeleitet werden kannIch hab mir nie die Muehe gemacht nachzuforschen, woher der Geschwindigkeitsboost stammt, aber alle Variablen so weit wie moeglich 'const' zu machen bringt mir oft messbar bessere Performance. Ich hab beim schnellen nachgoogeln nix gefunden, womit ich das belegen koennte, nur:
* http://igad.nhtv.nl/~bikker/files/rtgames.pdf (Seite 6, unten rechts), aber leider wird auch hier nicht gut begruendet WARUM der Speedup erfolgt.
* und als eine moegliche Erklaerung:
http://aigamedev.com/programming-tips/optimize-virtual-functions schrieb:
- use the const keyword. Some compilers (on some architectures) treat variable differently if they are const or not, thus it helps them optimizing register use.
-
Jester schrieb:
...also eigentlich nur bei globalen Konstanten.
das ist auch der einzige fall, bei dem ich 'const' verwende.
-
Blue-Tiger schrieb:
Ich bin sehr wohl der Meinung, dass const ueberall dort verwendet werden sollte, wo es verwendet werden kann (ohne dass dabei die Semantik veraendert wird).
I think it will be convenient to have special C++ compiler, where all variables, methods, etc. are const by default. And this compiler should have a special keyword "non_const" to explicity declare non-const objects
I have looked through some of my programs and firured out that they will became shorter with "non_const" keyword insteat of "const".
-
globals-freak schrieb:
Jester schrieb:
...also eigentlich nur bei globalen Konstanten.
das ist auch der einzige fall, bei dem ich 'const' verwende.
Naja und da ich mal annehem, dass du keine 100 MB an Speicher drinn hast, wird es kaum merkbar sein, dass da Speicher gespart wird.