2017-06-12 11 views
10

std::byte安全タイプ(R)C++のメモリ領域へのアクセスを提供することになっている抽象化は、しかし、新しい標準の17から始まる、それがhttp://en.cppreference.com/w/cpp/types/byteによれば、このように宣言していますされている:`std :: byte`はクラスではなくenumクラスですか?

enum class byte : unsigned char {} ; 

すなわちそれは、列挙されていないenum classです。 enumsの目的は通常、限られた数の列挙型を提供することなので、これはちょっと変わったようです。プライベートunsigned charのクラスを持つクラスは、これを行うより明白な方法のようです。

なぜこのように行われますか?

答えて

13

classunsigned charメンバーは、標準では、unsigned charと同じサイズまたはアラインメントである必要はありません。標準では、列挙型が基になる型と同じサイズおよび整列であることが要求されています。

標準では、標準で定義されたメンバーを持たず、サイズ、配置、constexprコンストラクタなどの特定の要件を持つclass型であると単純に宣言できました。実装はそれらの期待に従わなければなりません。しかし、同じ効果を得るためには、単にenum classを使う方がはるかに簡単です。あなたは、あなたが期待しているすべてのコンストラクタと変換動作を取得します。 enum classの型は基底型とは異なる型として扱われるため、このように定義するのは本当に欠点がありません。

関連する問題