Kelas Enum: Perlindungan untuk Enum dalam C
C menyediakan dua jenis enum: kelas enum dan enum biasa. Walau bagaimanapun, kelas enum menonjol kerana peningkatan keselamatan jenisnya. Memahami perbezaan ini adalah penting untuk memastikan kod yang boleh dipercayai.
Membezakan Kelas Enum dan Enum Biasa
Tidak seperti kelas enum, enum biasa membenarkan penukaran tersirat nilai enumerator kepada integer dan jenis lain. Ini membawa kepada kemungkinan perangkap, seperti pencampuran enum yang tidak disengajakan atau memberikan nilai yang salah.
Contoh: Enum Biasa
Pertimbangkan coretan kod berikut:
enum Color { red, green, blue }; enum Card { red_card, green_card, yellow_card }; ... Card card = Card::green_card; if (card == Color::red) // Issue: May lead to unexpected behavior cout << "Invalid comparison" << endl;
Di sini, membandingkan kad dengan Warna::merah mungkin mengakibatkan tidak disengajakan tingkah laku disebabkan oleh penukaran tersirat nilai pembanci kepada integer.
Kelebihan Kelas Enum
Kelas Enum menyelesaikan isu ini dengan menjadikan nama pembanci setempat kepada enum. Nilai tidak ditukar secara tersirat kepada jenis lain, menghapuskan kemungkinan kekeliruan atau ralat.
Contoh: Kelas Enum
Menulis semula kod di atas menggunakan kelas enum:
enum class Color { red, green, blue }; enum class Card { red_card, green_card, yellow_card }; ... Card card = Card::green_card; if (card == Color::red) // Error: Types do not match cout << "Invalid comparison" << endl;
Dalam kes ini, pengkompil membenderakan perbandingan sebagai tidak sah, menghalang yang tidak disengajakan salah guna.
Kesimpulan
Walaupun kedua-dua kelas enum dan enum biasa mempunyai tempatnya dalam C , secara amnya disyorkan untuk menggunakan kelas enum untuk keselamatan jenis yang dipertingkatkan. Dengan menyetempatkan nama enumerator dan menghalang penukaran tersirat, kelas enum mengurangkan risiko ralat dan memastikan kod yang boleh dipercayai.
Atas ialah kandungan terperinci Kelas Enum lwn. Enum Biasa dalam C : Mengapa Memilih Jenis Keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!