Ergebnis 1 bis 14 von 14

[C++] Konstanten

  1. #1 Zitieren
    General Avatar von Lemon
    Registriert seit
    Nov 2009
    Ort
    Haus der Gelehrten, Jharkendar
    Beiträge
    3.651
    Hey Leute!
    In einem Buch wird der Sinn von Konstanten folgendermaßen beschrieben:
    Der Vorteil von Konstanten liegt auf der Hand. Wenn sie beispielsweise ein Programm schreiben, welches an mehreren Stellen den Mehrwertsteuersatz benötigt und dieser Satz sollte sich einmal ändern, müssen Sie alle Stellen finden und korrigieren. Die Wahrscheinlichkeit, eine Stelle zu übersehen, ist nicht klein. Wir aber eine Konstante verwendet:

    const double mwst = 16;

    muss bei Bedarf nur noch diese eine Stelle verändert werden.
    Könnte man da nicht genauso eine normale Variable nehmen?

    gruß Lemon
    Odyssee - Im Auftrag des Königs

    "Ich will die Welt verändern, aber Gott gibt mir den Quellcode nicht!"

    Lemon ist offline

  2. #2 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.091
    Ja, aber die Variablen könntest du irgendwo im Code rein aus Versehen ändern sodass sie einen anderen Wert haben und dann suchst du dich wegen dem Fehler kaputt :P
    Bei Konstanten kann dieses Missgeschick nicht passieren.
    Außerdem kann der Compiler stellenweise bessere Optimierungen durchführen, wenn er sich sicher sein kann, dass ein bestimmter Wert konstant ist.
    Sumpfkrautjunkie ist offline

  3. #3 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.429
    Zitat Zitat von Lemon Beitrag anzeigen
    Könnte man da nicht genauso eine normale Variable nehmen?
    Ja, könnte man. Ob das auch sinnvoll ist, ist allerdings eine andere Frage. Sinnvoll wäre es u.a. dann, wenn (um beim Beispiel zu bleiben) das Programm Mehrwertsteueranteile für verschiedene Länder, in denen es auch unterschiedliche Mehrwertsteuersätze gibt, berechnen soll. Bleibt der Wert hingegen über die gesamte Programmlaufzeit gleich, weil man sich nur auf ein Land beschränkt, so wäre eine Konstante vorzuziehen.
    Thoronador ist offline

  4. #4 Zitieren
    General Avatar von Lemon
    Registriert seit
    Nov 2009
    Ort
    Haus der Gelehrten, Jharkendar
    Beiträge
    3.651
    Aber in der Erklärung steht doch etwas von Veränderung der Mwst? Ich dachte den Wert von Konstanten könne man nicht ändern
    Odyssee - Im Auftrag des Königs

    "Ich will die Welt verändern, aber Gott gibt mir den Quellcode nicht!"

    Lemon ist offline

  5. #5 Zitieren
    Drachentöter Avatar von Marthog
    Registriert seit
    Apr 2009
    Beiträge
    4.986
    Stell dir mal vor, du hättest ein großes Programm und darin brauchst du 50 Mal die Mehrwertsteuer.
    Wenn jetzt der Mehrwertssteuersatz geändert wird, zum Beispiel wie damals von 16 auf 19, dann müsstest du durch den ganzen Code gehen und alle Werte anpassen, wahrscheinlich vergisst du dabei einen Wert und das Programm hat einen Fehler.
    Mit der Konstante musst du nur an einer Stelle den Wert ändern und an allen Stellen verändern sich die Rechnungen.
    Der Wert sollte aber nicht variabel sein, denn da sich die Mehrwertssteuersätze in der Regel nicht während der Laufzeit ändern.
    Für Modder: Gothic NPC-Viewer
    Marthog ist offline

  6. #6 Zitieren
    General Avatar von Lemon
    Registriert seit
    Nov 2009
    Ort
    Haus der Gelehrten, Jharkendar
    Beiträge
    3.651
    Zitat Zitat von Marthog Beitrag anzeigen
    Stell dir mal vor, du hättest ein großes Programm und darin brauchst du 50 Mal die Mehrwertsteuer.
    Wenn jetzt der Mehrwertssteuersatz geändert wird, zum Beispiel wie damals von 16 auf 19, dann müsstest du durch den ganzen Code gehen und alle Werte anpassen, wahrscheinlich vergisst du dabei einen Wert und das Programm hat einen Fehler.
    Mit der Konstante musst du nur an einer Stelle den Wert ändern und an allen Stellen verändern sich die Rechnungen.
    Der Wert sollte aber nicht variabel sein, denn da sich die Mehrwertssteuersätze in der Regel nicht während der Laufzeit ändern.
    Soweit hab ich das ja verstanden. Aber erstmal: Wenn ich kein kompletter Idiot bin dann ändere ich die Mehrwertsteuer einfach nicht wenn ich sie so in einer Variable speichere. Und wenn es eine Konstante ist dann kann ich den Wert doch gar nicht verändern
    Odyssee - Im Auftrag des Königs

    "Ich will die Welt verändern, aber Gott gibt mir den Quellcode nicht!"

    Lemon ist offline

  7. #7 Zitieren
    Deus Avatar von Daepilin
    Registriert seit
    Oct 2006
    Ort
    NRW
    Beiträge
    11.619
    daher sollst dus ja als konstante machen. nimms doch einfach hin. es hilft z.B. wenn du irgendwo ne klammer oder rechnung falsch hast. wenn du dadurch ne konstante ändern würdest meckert der compiler, wenn das ne variable wäre hast du falsche werte im programm.

    und wenn du z.B. ein array mit der größe eines variablenwertes machen möchtest muss das sogar eine konstante sein, sofern du nur einfach int test[a] schreiben willlst.

    Daepilin ist offline

  8. #8 Zitieren
    Provinzheld Avatar von Cheesecake
    Registriert seit
    Feb 2012
    Beiträge
    266
    Zitat Zitat von Lemon Beitrag anzeigen
    Soweit hab ich das ja verstanden. Aber erstmal: Wenn ich kein kompletter Idiot bin dann ändere ich die Mehrwertsteuer einfach nicht wenn ich sie so in einer Variable speichere. Und wenn es eine Konstante ist dann kann ich den Wert doch gar nicht verändern
    const ist einfach eine Versicherung, mit der man Fehler verhindern kann, die sonst schwer zu finden wären. Da ist es auch egal, ob man nun ein Idiot ist oder nicht, denn jeder baut irgendwann mal einen Tippfehler ein.
    Wenn man keine ordentliche const-correctness erreicht, ist das außerdem immer ein Indikator für fehlerhaftes Design.
    Cheesecake ist offline

  9. #9 Zitieren
    General Avatar von Lemon
    Registriert seit
    Nov 2009
    Ort
    Haus der Gelehrten, Jharkendar
    Beiträge
    3.651
    Ah okay
    Und die Konstante kann ich ändern da ich sie ja im Code verändere und nicht im Programmablauf oder?
    Odyssee - Im Auftrag des Königs

    "Ich will die Welt verändern, aber Gott gibt mir den Quellcode nicht!"

    Lemon ist offline

  10. #10 Zitieren
    Deus Avatar von Daepilin
    Registriert seit
    Oct 2006
    Ort
    NRW
    Beiträge
    11.619
    nein, natürlich nicht. die kannst du einmal bei der deklaration mit einem wert belegen und den dann nichtmehr ändern.

    wenn du was ändern willst musst du echt variablen nutzen.

    Daepilin ist offline

  11. #11 Zitieren
    General Avatar von Lemon
    Registriert seit
    Nov 2009
    Ort
    Haus der Gelehrten, Jharkendar
    Beiträge
    3.651
    Zitat Zitat von Daepilin Beitrag anzeigen
    nein, natürlich nicht. die kannst du einmal bei der deklaration mit einem wert belegen und den dann nichtmehr ändern.

    wenn du was ändern willst musst du echt variablen nutzen.
    Aber ums ändern gehts doch die ganze Zeit. Ich will den einmal implementierten Mehrwertsteuersatz ändern.
    Jetzt verwirrt ihr mich...
    Odyssee - Im Auftrag des Königs

    "Ich will die Welt verändern, aber Gott gibt mir den Quellcode nicht!"

    Lemon ist offline

  12. #12 Zitieren
    Deus Avatar von Daepilin
    Registriert seit
    Oct 2006
    Ort
    NRW
    Beiträge
    11.619
    wie willst du den denn ändern? willst du verschiedene werte in einer kompilierten version, oder pro kompilierter version den gleichen wert?

    Daepilin ist offline

  13. #13 Zitieren
    Provinzheld Avatar von Cheesecake
    Registriert seit
    Feb 2012
    Beiträge
    266
    Man unterscheidet zwischen Compile-Zeit-Konstante und Laufzeit-Konstante. Bei ersterer steht der Wert der Konstante beim Kompilieren und somit bereits beim Programmstart fest, während eine Laufzeit-Konstante ihren Wert (man wird es kaum für möglich halten ) erst zur Laufzeit erhält. Die Mehrwertsteuer kann sich ändern, also sollte das Programm auch die Möglichkeit bieten, einen neuen Wert anzugeben. Dieser bleibt dann für diese eine Ausführung des Programms konstant. Eine Compile-Zeit-Konstante ist hingegen wie in Stein gemeißelt und bleibt bei jeder Ausführung des Programms gleich, außer man kompiliert es mit einem anderen Wert neu.
    Etwas klarer jetzt?

    Edit: In dem Beispiel in deinem ersten Post wäre mwst eine Compile-Zeit-Konstante.
    Cheesecake ist offline

  14. #14 Zitieren
    General Avatar von Lemon
    Registriert seit
    Nov 2009
    Ort
    Haus der Gelehrten, Jharkendar
    Beiträge
    3.651
    Zitat Zitat von Cheesecake Beitrag anzeigen
    Man unterscheidet zwischen Compile-Zeit-Konstante und Laufzeit-Konstante. Bei ersterer steht der Wert der Konstante beim Kompilieren und somit bereits beim Programmstart fest, während eine Laufzeit-Konstante ihren Wert (man wird es kaum für möglich halten ) erst zur Laufzeit erhält. Die Mehrwertsteuer kann sich ändern, also sollte das Programm auch die Möglichkeit bieten, einen neuen Wert anzugeben. Dieser bleibt dann für diese eine Ausführung des Programms konstant. Eine Compile-Zeit-Konstante ist hingegen wie in Stein gemeißelt und bleibt bei jeder Ausführung des Programms gleich, außer man kompiliert es mit einem anderen Wert neu.
    Etwas klarer jetzt?
    Genau so hatte ich es verstanden und dann kam die erneute Verwirrung
    Danke für die Erklärung, jetzt hab ichs
    Odyssee - Im Auftrag des Königs

    "Ich will die Welt verändern, aber Gott gibt mir den Quellcode nicht!"

    Lemon ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •