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
类型被视为与其基础类型不同的类型,因此您可以获得所需的所有行为,而不会以这种方式定义它.