std::byte
是一个抽象,它应该提供对C ++中内存区域的类型安全(r)访问,从新标准17开始。但是,它根据{{{}}声明了这种方式。 {3}}:
enum class byte : unsigned char {} ;
也就是说,它是enum class
,没有任何枚举。由于enums
通常的目的是提供一组有限的枚举,这似乎有点奇怪。具有私有unsigned char
成员的类似乎是更明显的方法。
为什么这样做?
答案 0 :(得分:18)
标准不要求具有class
成员的unsigned char
与unsigned char
具有相同的大小或对齐方式。而标准要求枚举与其基础类型的大小和对齐方式相同。
现在,标准可以简单地声明它是class
类型,没有标准定义的成员,但对其大小,对齐,constexpr
构造函数等有特定要求;实施必须遵循这些期望。但是简单地使用enum class
来获得相同的效果要容易得多。您将获得所期望的所有构造函数和转换行为。由于enum class
类型被视为与其基础类型不同的类型,因此您可以获得所需的所有行为,而不会以这种方式定义它。