enum struct和enum class有什么区别?

Rak*_*111 16 c++ enums c++11

看一下enum文档,我注意到了一件事:

枚举 - 一个enum,enum class(自C++ 11以来),或enum struct(自C++ 11以来)

enum而且enum class,当然,但是什么是enum struct

文档似乎说enum class并且enum struct完全相同:

[...] 范围枚举(使用枚举键 声明enum classenum struct)


  • enum struct| class 名称 { enumerator = constexpr , enumerator = constexpr , ... }
  • [...]

他们真的完全一样吗?或者我错过了什么差异?对同一件事有两种不同的语法有什么意义(如果它们是相同的)?

Ale*_*exD 19

enum class并且enum struct是相同的(强调我的).

7.2枚举声明
...
2 ....的枚举密钥 enum classenum struct语义上等同 ; 用这些中的一个中声明的枚举类型是一个范围的枚举,其枚举作用域枚举.


eer*_*ika 11

enum class当然,但是什么是enum struct

与...相同enum class.

他们真的完全一样吗?

是.文档是正确的.

或者我错过了什么差异?

不,没有区别.

对同一件事有两种不同的语法有什么意义(如果它们是相同的)?

我没有找到任何书面合理化的决定.标准和提案中没有任何内容.有人可能会猜测它class与vs struct-key键有某种对应关系.这是template<class T>在指定语法时做出的相反决定,struct不允许这样做.

  • 但是`template&lt;typename T&gt;`是允许的,也等价于`template&lt;class T&gt;`!标准在这两点上很混乱,不是吗? (2认同)
  • @ZeeByeZon:不。`class` 和 `struct` 在类型声明中接近同义词是很常见的。唯一的区别是其成员的默认公共/私人访问权限。由于作用域枚举没有私有成员,因此两者之间的唯一区别是没有意义的。 (2认同)
  • @NicolBolas 不仅仅是成员。对继承也有影响。 (2认同)