C ++ 17: Verwenden Sie immer noch Aufzählungen als Konstanten?

Topologische Sortierung

Ich bin es gewohnt, enumals Konstanten zu verwenden - sie sind schnell zu schreiben, können in .h-Dateien abgelegt werden und funktionieren einwandfrei.

enum {BOX_LEFT=10, BOX_TOP=50, BOX_WIDTH=100, BOX_HEIGHT=50};
enum {REASONS_I_LIKE_ENUM_AS_CONSTANTS = 3};

Ist das keine gute Idee mehr?

Ich sehe gute Gründe , die Aufzählungsklasse zu bevorzugen (herkömmliche Aufzählungen werden implizit in int konvertiert; herkömmliche Aufzählungen exportieren ihre Aufzähler in den umgebenden Bereich), aber dies sind Gründe, in diesem Fall alte Aufzählungen zu bevorzugen.

Ich sehe in einem Thread über statische constexpr int vs altmodische Aufzählung, dass altmodische Aufzählung besser ist, weil man sie mit einem statischen constexpr-Mitglied auch außerhalb der Klasse deklarieren muss. Dies gilt jedoch anscheinend nicht mehr für C ++ 17 und gilt möglicherweise ohnehin nur für Klassenmitglieder.

Was ist der bevorzugte Weg in C ++ 17?

Leichtigkeitsrennen im Orbit

Das ist subjektiv.

Dies war jedoch immer ein Missbrauch von Aufzählungen. Sie zählen nichts auf; Sie stehlen nur die enumFunktion, um einige mit beliebigen ganzzahligen Werten zu verknüpfen, die keinen eigenen logischen "Typ" haben sollen.

Das enum classist auch hier nicht angebracht (weil, wie Sie betont haben, die Eigenschaften eines enum class erzwungen werden, enumdas vorhanden sein sollte, das Sie aber eigentlich nicht wollen).

Da es kein Problem mehr gibt static constexpr int, würde ich das verwenden (oder constexpr inline intoder was auch immer es diese Woche ist).

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Warum Konstanten anstelle von Aufzählungen verwenden?

Verwenden von Aufzählungen als generischer Typ

Verwenden von Aufzählungen als Modellobjekt in Wicket

Aufzählungen als Objekt-IDs verwenden

So definieren Sie Aufzählungen als Routenparameter

Verwenden Sie Aufzählungen in React select

So verwenden Sie Aufzählungen in eckigen 5

Verwenden Sie niemals öffentlich verschachtelte Aufzählungen?

Sollten Sie in Java immer Enums anstelle von Konstanten verwenden

Erhalten Sie immer noch wiederholte Zeichenfolgen, wenn Sie 'Distinct()' verwenden

Verwenden von Klassen und Aufzählungen in C ++

Module als Konstanten verwenden

Warum können Sie immer noch ein entsorgtes Objekt verwenden?

Moq eine Klasse und verwenden Sie immer noch ihre Methoden

Sind C ++ - Aufzählungsstrukturen größer als normale Aufzählungen?

Verwenden von Aufzählungen als Container für Implementierungen

Verwenden von Aufzählungen als Kriterien in Automapper CreateMap und Projection

Verwenden von globalen Konstanten oder Aufzählungen ohne Angabe von Klassennamen

Warum ist jedes MST in G immer noch ein MST in G '(und umgekehrt), wenn wir die Kosten für jede Kante in G als c' = log17 (c) ändern?

Verwenden Sie Aufzählungen für Array-Indizes in Java

Verwenden Sie berechnete Werte für Aufzählungen

So verwenden Sie Aufzählungen für die Eingabe in Typoskript

Anzeigen von C # -Aufzählungen als Ansichten in der Datenbank

LARAVEL hat ManyThrough immer noch die ID als Fremdschlüssel verwenden

Verwenden von Aufzählungen zum Ändern von Druckanweisungen in C.

C ++ - Verwenden von Aufzählungen zum Generieren eines Kartenspiels

Verwenden von Aufzählungen und Schalter c#

Verbinden Sie sich in Redux ohne mapstatetoprops und erhalten Sie immer noch Dinge als Props

Wenn Sie ModuleList verwenden, erhalten Sie immer noch ValueError: Optimizer hat eine leere Parameterliste