Rumah >pembangunan bahagian belakang >C++ >Apa yang Berlaku Apabila Menghantar Nilai Tidak Sah ke Kelas Enum dalam C?
Pertimbangkan coretan kod:
enum class Color : char { red = 0x1, yellow = 0x2 }; char *data = ReadFile(); Color color = static_cast<Color>(data[0]);
Apa yang berlaku apabila data[0] ialah 100? Menurut Piawaian C 11 dan C 14, nilai yang terhasil tidak ditentukan, bermakna ia boleh jadi apa sahaja.
Walau bagaimanapun , selepas CWG 1766, menghantar nilai di luar julat penghitungan kepada jenis enum kini boleh menggunakan Tingkah Laku Tidak Ditakrifkan (UB). Perubahan ini hanya mempengaruhi pelaksanaan pengkompil yang memilih untuk menggunakan kecacatan pada mod kompilasi C 11 dan C 14 mereka.
Dalam suis pernyataan, keadaan ditukar kepada jenis kamiran. Untuk penghitungan tidak berskop, penukaran ini digunakan pada integer; untuk penghitungan berskop (kelas enum dan struktur enum), tiada kenaikan pangkat berlaku. Walau apa pun, nilai syarat berada dalam julat jenis dan int asas, jadi label lalai harus tetap dipukul.
Untuk enum tanpa jenis asas tetap, nilai pemutus di luar julat boleh mengakibatkan tingkah laku yang tidak ditentukan (sebelum CWG 1766) atau UB (selepas CWG 1766). Ini digambarkan dengan enum ColorUnfixed:
enum ColorUnfixed { red = 0x1, yellow = 0x2 };
Memandangkan jenis asas tidak tetap, julat ColorUnfixed adalah dari 0 hingga 3, menjadikan 100 nilai tidak sah.
Atas ialah kandungan terperinci Apa yang Berlaku Apabila Menghantar Nilai Tidak Sah ke Kelas Enum dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!