Konstanten zur Laufzeit?



  • Ist es möglich auf irgendeine Art und Weise in C++ Konstanten zur Laufzeit zu erzeugen?



  • Nein, denn das ist ein Widerspruch in sich. Unter Konstanten versteht man Werte, die zur Compile-Zeit bekannt sind und sich während der gesamten Laufzeit nicht ändern.



  • danke für die schnelle antwort



  • Was meinst du genau?

    Also du kannst durchaus eine Variable als konstante deklarieren, auch wenn der Wert erst zu Laufzeit bekannt wird.

    #include<iostream>
    
    int main() {
      int i;
      std::cin >> i;
      int const foo = i*100;
      std::cout << foo << '\n';
    }
    


  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • und das funktioniert auch?
    hab mir gedacht das man konstanten nicht mit variablen initialisieren darf.
    meine frage war eigentlich nur rein interessens halber weils mich einfach mal interessiert hat.

    auf jedenfall danke für die antworten 🙂



  • Es gibt im Prinzip 2 Arten von Konstanten:
    Compiletime-Konstante und Read-Only-Konstante

    Oder wie auch immer - AFAIK gibt es keine namentlichen Bezeichnungen dafür.

    Jedenfalls ist "int const i;" erstmal nur Read Only. Sprich ich kann den Wert nachdem er einmal gesetzt wurde nicht mehr ändern.

    Dazu kommen dann CompileTime Konstanten, wie zB "5" oder "1+3".

    Wenn nun eine ReadOnly Konstante mit einer CompileTime Konstanten initialisiert wird, ist die ReadOnly Konstante ebenfalls eine CompileTime Konstante (der Wert ist ja später nicht mehr änderbar).

    Deshalb geht

    template<int i>
    struct S{};
    
    int main() {
      int const i=4;
      S<i> s;
    }
    

    aber nicht

    template<int i>
    struct S{};
    
    int main() {
      int j=4;
      int const i=j;
      S<i> s;
    }
    

  • Mod

    Shade Of Mine schrieb:

    Oder wie auch immer - AFAIK gibt es keine namentlichen Bezeichnungen dafür.

    Du meinst konstante Ausdrücke (constant expression im Standard) im Gegensatz zu nicht modifizierbaren Variablen.



  • camper schrieb:

    Shade Of Mine schrieb:

    Oder wie auch immer - AFAIK gibt es keine namentlichen Bezeichnungen dafür.

    Du meinst konstante Ausdrücke (constant expression im Standard) im Gegensatz zu nicht modifizierbaren Variablen.

    Jein.

    Aber danke, ja gerade im Standard nachgesehen. Die korrekte Bezeichnung ist "constant expression". Aber es gibt eben auch konstante Sachen die keine constant expression sind.

    int j=3;
    int const i=j;
    

    i ist konstant aber keine constant expression. (möglicherweise zählt es als rvalue?)

    Ich bin leider mit der Terminologie des Standards nicht mehr so ganz vertraut 😕


Anmelden zum Antworten