2017-06-12 87 views
10

std::byte是应该提供一种安全的(r)的访问的存储器区域在C++中,开始与新的标准17.但是一种抽象,它根据http://en.cppreference.com/w/cpp/types/byte宣称这种方式:为什么`std :: byte`是一个枚举类而不是类?

enum class byte : unsigned char {} ; 

即是,这是一个enum class没有任何枚举。由于通常enums的目的是提供一个有限的枚举集合,这似乎有点奇怪。与私人unsigned char成员类似乎是更明显的方式来做到这一点。

为什么这样做?

回答

13

A classunsigned char成员将不会被要求与unsigned char相同的大小或对齐。而标准要求枚举与其基础类型的大小和对齐方式相同。现在

,标准可以简单说,它是一个class类型没有标准定义的部件,但在其大小,对齐,constexpr构造等具体要求;实现将不得不贯彻这些期望。但简单地使用enum class以获得相同效果要容易得多。您可以获得所期望的所有构造函数和转换行为。并且由于enum class类型被视为与其基础类型不同的类型,因此您可以获得所有您想要的行为,而不会以这种方式定义它。

相关问题