std::numeric_limits bei Initialisierung globaler Variable benutzen



  • sowohl in C++03 als auch in in C++11 gibt es alternativ <climits>

    http://en.cppreference.com/w/cpp/header/climits



  • Aber ich kann im Allgemeinen ja nicht davon ausgehen, dass diese Funktionen nicht auf irgendwelche anderen globalen Variablen zurückgreifen

    Doch, kannst du, weil es sonst keinen Sinn mancht sie in Funktionen zu verpacken. Wenn andere globale Variablen benoetigt warden, dann sind sie auch in einem Funktionsaufruf verpackt.



  • dd++ schrieb:

    sowohl in C++03 als auch in in C++11 gibt es alternativ <climits>

    http://en.cppreference.com/w/cpp/header/climits

    Wobei man sich schon in C++03 mit den Konstanten zurückhalten und sie in C++11 gar nicht mehr verwenden sollte.



  • Marthog schrieb:

    Wobei man sich schon in C++03 mit den Konstanten zurückhalten und sie in C++11 gar nicht mehr verwenden sollte.

    Wieso? Die "C++-Variante" ist viel schreibaufwändiger und hat in Nicht-template-Code keinerlei Vorteile, sondern lenkt im Gegenteil vom Wesentlichen ab.



  • das limit schrieb:

    Die "C++-Variante" ist viel schreibaufwändiger und hat in Nicht-template-Code keinerlei Vorteile, sondern lenkt im Gegenteil vom Wesentlichen ab.

    Das sehe ich nicht so. Sie ist zwar länger, das heißt aber nicht dass sie schlechter ist.

    Vorteile:
    - Verwendbar bei templates oder mit decltype -> einheitlich
    - Es ist übersichtlich, welchen Sinn der Wert hat, so ist z.B. bei

    std::numeric_limits<unsigned int>::min()
    

    klar, dass man den kleinsten Wert von unsigned int will, würde man nur 0 hinschreiben, wäre das nicht so klar.



  • Verwendbar bei templates oder mit decltype -> einheitlich

    Beides keine Vorteile. Makros sind Text-Wergzeuge. Am Ende steht da nur ein Literal des entsprechenden Typs, das funktioniert auch wunderbar mit decltype & co.

    dass man den kleinsten Wert von unsigned int will

    Ist auch beim Makro INT_MIN klar.



  • Marthog schrieb:

    Sie ist zwar länger, das heißt aber nicht dass sie schlechter ist.

    Vorteil ist auch, dass die Typen 1:1 geschrieben werden. Also nicht etwa SHRT für short .

    Sone schrieb:

    Ist auch beim Makro INT_MIN klar.

    Es geht um unsigned int .



  • Nexus schrieb:

    Marthog schrieb:

    Sie ist zwar länger, das heißt aber nicht dass sie schlechter ist.

    Vorteil ist auch, dass die Typen 1:1 geschrieben werden. Also nicht etwa SHRT für short .

    Ich finde die Schreibweise von numeric_limits natürlich auch besser. Weil der Typ da so schön steht, als Template-Argument.

    Nexus schrieb:

    Sone schrieb:

    Ist auch beim Makro INT_MIN klar.

    Es geht um unsigned int .

    Dann schreibt man eben 0 hin und macht ein Kommentar.


  • Mod

    Sone schrieb:

    Weil der Typ da so schön steht, als Template-Argument.

    Der ist allerdings redundant, wenn er schon bei der Deklaration der Variablen angebene wurde.

    Also

    int foo = std::numeric_limits<decltype(foo)>::max(); // oder
    auto bar = std::numeric_limits<int>::max();
    

    Ganz nebenbei erfordert das die Verwendung einer vernünftigen Initialisierungssyntax :p



  • camper schrieb:

    :p

    Seit wann benutzt du solch' vulgäre Smileys? 😃

    Der ist allerdings redundant, wenn er schon bei der Deklaration der Variablen angebene wurde.

    Darum geht es mir gar nicht, nur die Schreibweise an sich finde ich schön.

    Und natürlich hast du Recht - man sollte versuchen, eine entsprechende, möglichst wenig redundante Initialisierungssyntax zu verwenden.


Anmelden zum Antworten