constants



  • Wie macht ihr in C++ eigentlich Konstante? Was mich an den const int Variablen stört, ist einfach dass ich sie in keinem switch-block abprüfen kann, und lange if else constructe schauen erstmal unübersichtlich aus und sehr lahm im Gegensatz zu einer Jumptable beim swith. Und dass sie bei jedem mal einsetzen vom Speicher abgefragt werden müssen, oder optimieren heutige Compiler schon so gut?

    Was mein ihr dazu?



  • ich versteh nicht, warum du konstanten durch einen switch block schicken willst, wenn der wert sowieso schon bekannt ist. wenn du das erklaerst, faellt mir vielleicht eine alternative ein.

    Und dass sie bei jedem mal einsetzen vom Speicher abgefragt werden müssen

    versteh ich leider auch nicht. oder meinst das konstanten das ganze programm ueber in einem register gespeichert werden sollen? aber ich denke egal was du meinst, heutige compiler optimieren das ;).

    was auch immer



  • enum



  • const int i=6;
    char c[i];// <- Muss vom Compiler at compile time ersetzt werden
    


  • enum

    one word, one man 😉

    const int i=6;
    char c[i];// <- Muss vom Compiler at compile time ersetzt werden
    

    was du brauchst ist ein dynamisch allokiiertes char array. was aber viel, viel besser ist, findest du bei der stl. ich meine natuerliche nichts geringeres als std:string. wenn es aber unbedingt ein char array sein muss, hier noch ein beispiel:

    std::size_t length;
    
    std::cin >> length;
    
    char* string = new char [ length + 1 ]; // +1 wegen '\0'
    

    was auch immer



  • Georgius schrieb:

    Und dass sie bei jedem mal einsetzen vom Speicher abgefragt werden müssen, oder optimieren heutige Compiler schon so gut?

    Konstanten wird ein guter Compiler nur dann im Speicher abbilden, wenn er dazu genötigt wird.

    Georgius schrieb:

    und lange if else constructe schauen erstmal unübersichtlich aus und sehr lahm im Gegensatz zu einer Jumptable beim swith

    Wenn du Geschwindigkeit brauchst, dann schau dir mal Template Meta Programming an. 😉



  • warum machst du dir um solche Micro-Optimierung so einen Kopf?

    const int i=10;
    if(i==10)
      a();
    else
      b();
    

    wird dir jeder normale Compiler in ein

    a();
    

    umwandeln. Fertig aus. Wie gesagt, was willst du an Konstanten groß rumtesten?



  • Georgius schrieb:

    Wie macht ihr in C++ eigentlich Konstante? Was mich an den const int Variablen stört, ist einfach dass ich sie in keinem switch-block abprüfen kann...

    enum wurde ja schon genannt aber wie wär's mit #define?

    #define MEINE_KONSTANTE 1234
    

    der compiler hat keine chance da eine variable draus zu machen, weil es eine textersetzung ist. überall wo MEINE_KONSTANTE steht, wird das gegen 1234 ausgetauscht.



  • @net
    das der Präprozessor böse ist, weiss man doch mittlerweile. Wenn der Compiler aus irgend einer konstante nun doch eine Variable macht, dann hat das idr. einen Grund, zB. weil man vergessen hat Optimierungen anzustellen 🙄


Anmelden zum Antworten