为什么`std :: byte`是枚举类而不是类?

Nir*_*man 18 c++ c++-standard-library c++17

std::byte是一个抽象,它应该提供对C++内存区域的类型安全(r)访问,从新标准17开始.但是,它是根据http://en.cppreference.com/w/cpp这样声明的./ types/byte:

enum class byte : unsigned char {} ;
Run Code Online (Sandbox Code Playgroud)

也就是说,它enum class 没有任何枚举.由于通常的目的enums是提供一组有限的枚举,这似乎有点奇怪.具有私有unsigned char成员的类似乎是更明显的方法.

为什么这样做?

Nic*_*las 20

标准不要求class带有unsigned char成员的A 具有相同的大小或对齐unsigned char.而标准要求枚举与其基础类型的大小和对齐方式相同.

现在,标准可以简单地声明它是一个class没有标准定义成员的类型,但对其大小,对齐,constexpr构造函数等有特定要求; 实施必须遵循这些期望.但是简单地使用它enum class来获得相同的效果要容易得多.您将获得所期望的所有构造函数和转换行为.并且由于enum class类型被视为与其基础类型不同的类型,因此您可以获得所需的所有行为,而不会以这种方式定义它.