web-dev-qa-db-ja.com

列挙型構造体と列挙型クラスの違いは何ですか?

enum documentation を見て、気づいたことが1つありました。

enum-key-enumenum class(since C++ 11)、またはenum struct(C++ 11以降)

enumenum classは確かですが、enum structとは何ですか。

ドキュメントは、enum classenum structはまったく同じであると言っているようです:

[...]スコープ付き列挙enum-keyenum classまたはenum structで宣言)


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

彼らは本当にまったく同じですか?それとも私が見逃した違いはありますか?同じものに対して2つの異なる構文を持つこと(それらが同じである場合)の意味は何ですか?

20
Rakete1111

enum classおよびenum structは同じです(私の強調)。

7.2列挙宣言
...
2 ....enum-keysenum classおよびenum struct意味的に同等です;これらのいずれかで宣言された列挙型は、スコープ付き列挙型であり、その列挙子スコープの列挙子です。

19
AlexD

enum class、もちろんですが、enum struct

と同じ enum class

彼らは本当にまったく同じですか?

はい。ドキュメントは正しいです。

それとも私が見逃した違いはありますか?

いいえ、違いはありません。

同じものに対して2つの異なる構文を持つこと(それらが同じである場合)の意味は何ですか?

決定についての書面による合理化は見つかりませんでした。標準も提案もありません。これは、classstructのクラスキーに相当するものだと思われるかもしれません。これは、template<class T>構文が指定されましたが、structは使用できません。

11
eerorika