Wieso "const" verwenden?



  • es hat auch einen gedanklichen weg:

    ich schau mir das programm an und ich muss darüber nachdenken: ahaaa genau das ist eine const variable deswegen war das so und so.....

    weiters bringt const den vorteil, dass die angst weg ist, sie evtl verändern zu können.

    Und wenn du für jemanden Code dokumentierst, macht const das natürlich klarer. Also es bringt auch Verständnisvorteile.

    Soviel aus der Gedankensicht



  • Squall schrieb:

    Ich meine, wenn ein Programmierer nicht will, dass sich ein Wert nicht ändert, lässt er/sie eben die Finger davon, oder nicht?

    genau, und der 5. oder 6. Programmierer eines Teams weiß von diesem undokumentierten Bezeichner nix und schon ists passiert - da kannste dann lange suchen ^^

    oder programmierer x schreibt nen framework, x verlässt die firma, bevor es dokumentiert werden kann, y+z nutzen es, müssen sich aber erstmal durch den code wühlen... alles zeitfaktoren ^^



  • Squall schrieb:

    Nabend,

    ich frage mich immer mehr, wieso sollte man das Schlüsselwort "const" verwenden? Ist es nicht sinnlos? Ich meine, wenn ein Programmierer nicht will, dass sich ein Wert nicht ändert, lässt er/sie eben die Finger davon, oder nicht?
    Oder gibt es wirklich Anwendungsgebiete in denen man wirklich nicht oder nur schwer auf const verzichten kann?

    Danke,
    Gruß
    Squall

    Naja, das "lässt er die Finger davon" ist ein wenig ungeschickt. Es arbeitet wahrscheinlich nicht nur ein Programmierer an einen Projekt oder der Coder wird als Lib verwendet, dann gibt es keinen Grund, warum jemand auf einen Wert Zugriff hat, mit dem er überhaupt nichts anfangen kann/darf.
    So können Fehler schon mal vermieden werden.



  • 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.





  • Bashar schrieb:

    Nachteile von const:
    http://c2.com/cgi/wiki?AvoidConstCompletely

    Das 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:

    http://c2.com/cgi/wiki?AvoidConstCompletely

    Unlesbar. Wohl entstanden nach Lektüre von AvoidOrthographyCompletely.



  • Bashar schrieb:

    Nachteile von const:
    http://c2.com/cgi/wiki?AvoidConstCompletely

    Wenn man sich das mal genauer anschaut kommen dort zu jedem Nachteil, den const angeblich hat (schwarze Punkte), mehrere Gegenargumente (weisse Punkte)...


  • Mod

    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


Anmelden zum Antworten