Bedeutung von Const für den Compiler !



  • Hey Leute ..
    Wie genau interpretiert der Compiler eine Const Variable ..

    In dem Skript meines Professors verstehe ich nämlich folgende Aussage nicht ..

    "CONST IST EINE WIRKSAME METHODE UM ZUSICHERUNG ZUR COMPILEZEIT ZU PRÜFEN"

    Die Funtionsweise von Const Variablen , Funktionen und Zeigern ist mir völlig klar ... ich würde nur gerne wissen wie ich die eben genannte Aussage zu interpretiren habe ..Ich errinnere mich auch nur noch schwach an seine Worte ..

    greets



  • diese aussage würde ich einfach so interpretieren, dass er meint: es ist sicher, dass die variable(ihr wert) nicht (versehentlich) geändert wird - und das wird logischerweise zur compilezeit geprüft...

    ansonsten heist const für den compiler einfach nur, dass es ein l-value und kein r-value ist...
    das kann zwar mittels const_cast geändert werden, ist aber nicht zu empfehlen...

    bb



  • es ist umgekehrt - const Werte sind keine L-Values.
    Sie dürfen nicht auf der linken Seite einer Zuweisung stehen.
    Es muss bei Grunddatentypen (int, double,..) nicht mal eine Speicheradresse geben: Der Compiler kann einfach den Wert direkt in den Code eintragen
    (wenn er will).



  • 😕 Das kann irgendwie nicht stimmen, da const nur bei lvalues überhaupt von Interesse ist. Es verhindert ja gerade, dass man einem lvalue etwas zuweisen kann. Da das const Teil des Typsystems ist, bewirkt es auch, dass die Adresse eines const-lvalues ein Zeiger-auf-const ist usw., d.h. man wird das const nicht wieder (ohne const_cast) los.

    CONST IST EINE WIRKSAME METHODE UM ZUSICHERUNG ZUR COMPILEZEIT ZU PRÜFEN

    heißt: Mit const erkläre ich die Zusicherung, dass mein Programm nicht versuchen wird, eine so typisierte Variable zu verändern. Das Typsystem stellt sicher, dass man keinen nicht-const-Zugriff auf diese Variable erhält (auch über beliebige Indirektionen nicht), dadurch überprüft der Compiler also während der Typprüfung, ob die obige Zusicherung eingehalten wird.



  • ansonsten heist const für den compiler einfach nur, dass es ein l-value und kein r-value ist...

    Blödsinn.

    es ist umgekehrt - const Werte sind keine L-Values.

    Auch Blödsinn.

    Das const-Konzept ist größtenteils orthogonal zum L/R-Value-Konzept. Es gibt ein paar Sonderregeln, die die Interaktion zwischen diesen beiden Konzepten regeln (zB darf man eine Referenz-auf-const auch mit einem RValue-Ausdruck initialisieren, "normale" Referenzen nur mit einem LValue-Ausdruck).

    Es gibt aber alle Kombinationen:
    - const Rvalue Ausdruck
    - nicht-const Rvalue Ausdruck
    - const Lvalue Ausdruck
    - nicht-const Lvalue Ausdruck

    Lest Euch mal die Definition von Lvalues und Rvalues hier durch (Abschnitt 3.10).

    const ist einfach ein Teil des Regelsatzes von C++. Es erlaubt einige Dinge zusätzlich (Binden von Referenzen auf temporäre Objekte) und verbietet einige Dinge ("Modifikationen" von Objekten).



  • ich meine, krümelkacker hat recht (d.h. ich habe mich oben geirrt). Das Wort 'orthogonal' beschreibt es ganz gut und es ist immer gut, in der Referenz noch mal nachzulesen. Danke für den Tipp.


Anmelden zum Antworten