列挙型
C#の列挙型はSystem.Enumから暗黙的に派生する値型であり、Cのenumの意味する多くの"小さな整数"を保持する。いくつかの数値演算はenumでは定義されないが、enum値は明示的に整数値に型変換することができ、また整数値から元に戻すこともできる。またenum変数はenum宣言によって定義されなかった値を保存できる。例として、
が与えられたとき、式Diamonds + 1とHearts - Clubsは直接許可される(ループで一連の値を走査することや、二つのenumの間にいくつのステップがあるか計算することはありうる)が、Hearts * Spadesは理にかなっていないと考えられ、値が最初に整数に変換されるということだけが許可される。
また、FlagsAttributeを指定することで、ビット演算が許可される。
C++はCから直接引き継いだ列挙型を持っている。しかし列挙定数は、int型ではなく基の列挙型となる(ただしint型へ昇格できる。整数から列挙型への変換には明示的なキャストが必要である)。このため、整数型と列挙型との間で多重定義できる。また、列挙型は利用者定義型の一種であるということから、列挙型に対しての演算子多重定義も可能となっている。
C言語とは異なり、C++では曖昧さがない限りenumキーワードで修飾せずとも列挙型をそのまま型名として使用できる。これは構造体や共用体の使用時にstructやunionキーワードによる修飾が不要であるのと同じである。
C++11では、スコープ付きの強く型付けされた列挙型(enum classもしくはenum struct)が新たに実装された。