2016-07-22 4 views
4

Mit Blick auf die enum documentation, war es eine Sache, die ich bemerkt:Was ist der Unterschied zwischen Enum-Struktur und Enum-Klasse?

Enum-Schlüssel - eine von enum, enum class (seit C++ 11) oder enum struct (da C++ 11

)

enum und enum class, sicher, aber was ist ein enum struct?

docs scheinen zu sagen, dass enum class und enum struct genau gleich sind:

[...] scoped Aufzählung (deklariert mit dem Enum-Schlüsselenum class oder enum struct)


  • enum struct | className{ enumerator = constexpr , enumerator = constexpr , ... }
  • [...]

Sind sie wirklich genau das gleiche? Oder gibt es Unterschiede, die ich übersehen habe? Was ist der Punkt (wenn sie gleich sind), zwei verschiedene Syntax für die gleiche Sache zu haben?

+0

Worauf kommt es an, beide Syntax nicht zu berücksichtigen? Es ist sinnvoll, wenn beide angegeben haben, dass struct und class in C++ (abgesehen von public/private) normalerweise äquivalent sind. –

Antwort

7

enum class und enum struct sind die gleichen (Schwerpunkt meins).

7,2 Enumeration Erklärungen
...
.... Die ENUM-Tastenenum class und enum struct sind semantisch äquivalente; ein Aufzählungstyp mit einem dieser deklariert ist eine Aufzählung scoped und seine Enumeratoren sind Enumeratoren scoped.

3

enum class, sicher, aber was ist ein enum struct?

Wie enum class.

Sind sie wirklich genau gleich?

Ja. Die Dokumentation ist korrekt.

Oder gibt es irgendwelche Unterschiede, die ich verpasst habe?

Nein. Es gibt keine Unterschiede.

Was ist der Punkt (wenn sie gleich sind), 2 verschiedene Syntax für die gleiche Sache zu haben?

Ich habe keine schriftliche Rationalisierung für die Entscheidung gefunden. Es gibt keine in der Norm noch den Vorschlag. Man könnte vermuten, dass es eine Art Gegenstück zu class vs struct Klassenschlüssel ist. Dies ist eine gegenteilige Entscheidung, als wenn template<class T> Syntax angegeben wurde, wobei struct nicht zulässig ist.