enum feste Werte?



  • Standard N3337:

    7.2.2 schrieb:

    [...]
    If the first
    enumerator has no initializer, the value of the corresponding constant is zero.
    [...]



  • Sone schrieb:

    möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Allerdings auch nur dann, wenn die Anzahl an Enumeratoren nicht den (Mindest-)Range deines underlying_type s sprengt, der möglicherweise plattformabhängig ist (was (so gut?) wie nie vorkommt).

    Das möglicherweise kannst du weglassen. Wenn allerdings eine Aufzählung den Wertebereich des underlying_type s sprengt, dann ist die Person zwischen Bildschirm und Stuhl wohl reif für die Psychiatrie.



  • out schrieb:

    Sone schrieb:

    möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Allerdings auch nur dann, wenn die Anzahl an Enumeratoren nicht den (Mindest-)Range deines underlying_type s sprengt, der möglicherweise plattformabhängig ist (was (so gut?) wie nie vorkommt).

    Das möglicherweise kannst du weglassen.

    Schleicht sich immer ein 😃



  • out schrieb:

    Sone schrieb:

    möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Allerdings auch nur dann, wenn die Anzahl an Enumeratoren nicht den (Mindest-)Range deines underlying_type s sprengt, der möglicherweise plattformabhängig ist (was (so gut?) wie nie vorkommt).

    Das möglicherweise kannst du weglassen. Wenn allerdings eine Aufzählung den Wertebereich des underlying_type s sprengt, dann ist die Person zwischen Bildschirm und Stuhl wohl reif für die Psychiatrie.

    Aber wieso reden wir überhaupt darüber, wo es doch nun Strongly typed enumerations gibt 😋.



  • out schrieb:

    out schrieb:

    Sone schrieb:

    möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Allerdings auch nur dann, wenn die Anzahl an Enumeratoren nicht den (Mindest-)Range deines underlying_type s sprengt, der möglicherweise plattformabhängig ist (was (so gut?) wie nie vorkommt).

    Das möglicherweise kannst du weglassen. Wenn allerdings eine Aufzählung den Wertebereich des underlying_type s sprengt, dann ist die Person zwischen Bildschirm und Stuhl wohl reif für die Psychiatrie.

    Aber wieso reden wir überhaupt darüber, wo es doch nun Strongly typed enumerations gibt 😋.

    Wie kommste denn jetzt darauf?



  • Sone schrieb:

    out schrieb:

    out schrieb:

    Sone schrieb:

    möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Allerdings auch nur dann, wenn die Anzahl an Enumeratoren nicht den (Mindest-)Range deines underlying_type s sprengt, der möglicherweise plattformabhängig ist (was (so gut?) wie nie vorkommt).

    Das möglicherweise kannst du weglassen. Wenn allerdings eine Aufzählung den Wertebereich des underlying_type s sprengt, dann ist die Person zwischen Bildschirm und Stuhl wohl reif für die Psychiatrie.

    Aber wieso reden wir überhaupt darüber, wo es doch nun Strongly typed enumerations gibt 😋.

    Wie kommste denn jetzt darauf?

    Ja dann kannst du doch den underlying_type bestimmen.





  • out schrieb:

    Sone schrieb:

    out schrieb:

    out schrieb:

    Sone schrieb:

    möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Allerdings auch nur dann, wenn die Anzahl an Enumeratoren nicht den (Mindest-)Range deines underlying_type s sprengt, der möglicherweise plattformabhängig ist (was (so gut?) wie nie vorkommt).

    Das möglicherweise kannst du weglassen. Wenn allerdings eine Aufzählung den Wertebereich des underlying_type s sprengt, dann ist die Person zwischen Bildschirm und Stuhl wohl reif für die Psychiatrie.

    Aber wieso reden wir überhaupt darüber, wo es doch nun Strongly typed enumerations gibt 😋.

    Wie kommste denn jetzt darauf?

    Ja dann kannst du doch den underlying_type bestimmen.

    Das war mir schon lange klar 😃
    Nur, wie bringt dich das weiter? static assertion mit std::numeric_limits<std::underlying_type<EnumT>::type>::max() ?



  • Das erste Element ist also immer 0 und die nachfolgenden jeweils um 1 erhöht?



  • Wurstinator schrieb:

    Das erste Element ist also immer 0 und die nachfolgenden jeweils um 1 erhöht?

    Ja, sofern du es nicht anders definiert hast.

    Gruß Christopher



  • Wurstinator schrieb:

    Das erste Element ist also immer 0 und die nachfolgenden jeweils um 1 erhöht?

    Richtig.

    Sone schrieb:

    Das war mir schon lange klar 😃
    Nur, wie bringt dich das weiter? static assertion mit std::numeric_limits<std::underlying_type<EnumT>::type>::max() ?

    Hä, spielt doch überhaupt keine Rolle. Denn damit ist es nun erst recht nicht mehr möglich ist, den Wertebereich des underlying_type zu sprengen, da du ihn ja an die Anzahl Enumeratoren anpassen kannst. Oder glaubst du wirklich, jmd. haut da ein paar Mrd. Enumeratoren rein. 😃



  • out schrieb:

    Wurstinator schrieb:

    Das erste Element ist also immer 0 und die nachfolgenden jeweils um 1 erhöht?

    Richtig.

    Abgesehen davon verstehe ich sowieso nicht, wieso man Enumeratoren explizit Werte zuweisen sollte, außer vielleicht die Enumeratoren repräsentierten Flags und man will Bitoperationen durchführen. Oder wie seht ihr das?



  • Okay, danke für die Hilfe.



  • out schrieb:

    Sone schrieb:

    Das war mir schon lange klar 😃
    Nur, wie bringt dich das weiter? static assertion mit std::numeric_limits<std::underlying_type<EnumT>::type>::max() ?

    Hä, spielt doch überhaupt keine Rolle. Denn damit ist es nun erst recht nicht mehr möglich ist, den Wertebereich des underlying_type zu sprengen, da du ihn ja an die Anzahl Enumeratoren anpassen kannst. Oder glaubst du wirklich, jmd. haut da ein paar Mrd. Enumeratoren rein. 😃

    Nein, was ich anfangs meinte war, dass du als underlying_type explizit int8_t oder so festlegst und "ausversehen" 257 Enumeratoren definierst 😃



  • out schrieb:

    out schrieb:

    Wurstinator schrieb:

    Das erste Element ist also immer 0 und die nachfolgenden jeweils um 1 erhöht?

    Richtig.

    Abgesehen davon verstehe ich sowieso nicht, wieso man Enumeratoren explizit Werte zuweisen sollte, außer vielleicht die Enumeratoren repräsentierten Flags und man will Bitoperationen durchführen. Oder wie seht ihr das?

    Naja, bei einigen Enumerationen konvertiere ich ein Objekt zu einem Boolean um zu sehen, ob er nicht gleich dem ersten Enumerator ist.



  • Wurstinator schrieb:

    Ich muss eine enum-Variable serialisieren und möchte wissen, ob es fehlerfrei funktioniert, wenn ich sie einfach mit static_cast in einen numerischen Typ umwandle.

    Ja, das funktioniert. Probleme bekommst du allerdings, wenn du plötzlich Enumeratoren entfernst oder neue dazwischen einfügst, da die Nummern nicht mehr stimmen.


Anmelden zum Antworten