Neden numaralama sınıf düz numaralama tercih edilir?
Birkaç kişi numaralandırma kullanmak için tavsiye duydumsınıflaronların yüzünden Ctür güvenliği.
Ama bu gerçekten ne anlama geliyor?
İnsanlar bir şey demesinden nefret ediyorumiyiya da bir şeykötüaçıklamadantam olarakneden böyle şeyler söyler.
Biraz araştırdım ve bu soruya cevap vermek ister bu yüzden StackOverflow üzerinde net bir cevap bulamadım. Bir gün hata ayıklama birinden kurtarır umarım :) Diğer cevapları ve açıklamaları daha söylemek, eğer orada bekliyoruz.
CEVAP
C enum
iki tür vardır:
enum class
es- Düz
enum
ler
Onlara bildirmek için nasıl burada örnek bir çift vardır:
enum class Color { red, green, blue }; // enum class
enum Animal { dog, cat, bird, human }; // plain enum
İkisi arasındaki fark nedir?
enum class
es - numaralandırıcısı isimleryereliçin numaralama ve değerlerideğildolaylı olarak diğer türleri (enum
int
başka bir gibi) dönüştürünDüz
enum
s - nerede numaralandırıcısı numaralama aynı kapsamda ve onların değerleri örtülü olarak tamsayılar ve diğer tür dönüştürmek
Örnek:
enum Color { red, green, blue }; // plain enum
enum Card { red_card, green_card, yellow_card }; // another plain enum
enum class Animal { dog, deer, cat, bird, human }; // enum class
enum class Mammal { kangaroo, deer, human }; // another enum class
void fun() {
// examples of bad use of plain enums:
Color color = Color::red;
Card card = Card::green_card;
int num = color; // no problem
if (color == Card::red_card) // no problem (bad)
cout << "bad" << endl;
if (card == Color::green) // no problem (bad)
cout << "bad" << endl;
// examples of good use of enum classes (safe)
Animal a = Animal::deer;
Mammal m = Mammal::deer;
int num2 = a; // error
if (m == a) // error (good)
cout << "bad" << endl;
if (a == Mammal::deer) // error (good)
cout << "bad" << endl;
}
Sonuç:
11**es hataları neden olabilecek daha az sürprizler sebep oldukları için tercih edilmelidir.
Numaralama.() değerleri vs EnumSet.( )...
Neden char[] şifreler için Dize Java t...
Neden numaralama izinleri genellikle 0...
Neden sınıf adı enjekte edilir?C :: ...
Neden C bir numaralama bildirirken typ...