Bazı eski cevaplar bile 44 olumlu oy aldı, hepsine katılmıyorum. Kısacası, sıralamayı önemsememiz gerektiğini düşünmüyorum underlying type
.
Öncelikle, C ++ 03 Enum türü, işaret kavramı olmayan, kendine özgü bir türdür. C ++ 03 standardından beridcl.enum
7.2 Enumeration declarations
5 Each enumeration defines a type that is different from all other types....
Bu nedenle, bir enum türünün işaretinden bahsederken, örneğin <
operatörü kullanarak 2 enum işlenenini karşılaştırırken , aslında enum türünü örtük olarak bir integral türüne dönüştürmekten bahsediyoruz. Önemli olan bu integral tipinin işaretidir . Ve numaralandırmayı integral türüne dönüştürürken bu ifade geçerlidir:
9 The value of an enumerator or an object of an enumeration type is converted to an integer by integral promotion (4.5).
Ve görünüşe göre, numaralamanın altında yatan tipin İntegral Teşvikle hiçbir ilgisi yok. Standart, İntegral Promosyonu şu şekilde tanımladığından:
4.5 Integral promotions conv.prom
.. An rvalue of an enumeration type (7.2) can be converted to an rvalue of the first of the following types that can represent all the values of the enumeration
(i.e. the values in the range bmin to bmax as described in 7.2: int, unsigned int, long, or unsigned long.
Bu nedenle, bir numaralandırma türünün haline gelip gelmediği signed int
veya numaralandırmanın temelini oluşturan türü değil, tanımlanan numaralandırıcıların tüm değerlerini içerip içermeyeceğine unsigned int
bağlıdır signed int
.
İlgili soruma bakın
İntegral Türüne Dönüştürüldükten Sonra C ++ Enum Türü İşareti Yanlış