Rumah > pembangunan bahagian belakang > C++ > Apa yang Berlaku Apabila Menghantar Nilai Tidak Sah ke Kelas Enum dalam C?

Apa yang Berlaku Apabila Menghantar Nilai Tidak Sah ke Kelas Enum dalam C?

DDD
Lepaskan: 2024-12-24 20:22:12
asal
371 orang telah melayarinya

What Happens When Casting an Invalid Value to an Enum Class in C  ?

Kesan Menghantar Nilai Tidak Sah ke Kelas Enum

Pertimbangkan coretan kod:

enum class Color : char { red = 0x1, yellow = 0x2 };
char *data = ReadFile();
Color color = static_cast<Color>(data[0]);
Salin selepas log masuk

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.

CWG 1766: Perubahan dalam Tingkah Laku

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.

Promosi Sepadu dalam Pernyataan Suis

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.

Awas dengan Penghitungan Tidak Berskop

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 };
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan