Rumah >pembangunan bahagian belakang >C++ >Bagaimana Secara Tersirat Menukar Enum yang Ditaip Kuat kepada Int dalam C?
Penukaran Tersirat Enum Ditaip Kuat kepada Int
Enum ditaip kuat, yang diperkenalkan dalam C 11, direka untuk mengelakkan penukaran tersirat kepada integer. Walau bagaimanapun, mungkin terdapat kes di mana anda ingin menukar nilai enum yang ditaip kuat kepada int tanpa hantaran yang jelas.
Untuk menangani perkara ini, beberapa pendekatan telah dicadangkan:
Anda boleh menentukan fungsi yang melakukan penukaran. Contohnya:
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; template <typename E> int to_int(E e) { return static_cast<int>(e); } int main() { // Use the to_int function to convert the strongly typed enum value b::B2 to int std::cout << to_int(b::B2) << std::endl; }</code>
Untuk memudahkan sintaks, anda boleh menggunakan templat fungsi yang secara automatik menyimpulkan jenis enum:
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; template <typename E> constexpr typename std::underlying_type<E>::type get_underlying(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); } int main() { // Use the get_underlying function to convert the strongly typed enum value b::B2 to int std::cout << get_underlying(b::B2) << std::endl; }</code>
Anda juga boleh menggunakan makro untuk menjadikan proses penukaran lebih ringkas :
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; #define TO_INT(e) static_cast<int>(e) int main() { // Use the TO_INT macro to convert the strongly typed enum value b::B2 to int std::cout << TO_INT(b::B2) << std::endl; }</code>
Walaupun mungkin untuk menukar enum yang ditaip kuat kepada int tanpa hantaran eksplisit, adalah penting untuk ambil perhatian bahawa ini mungkin membawa kepada tingkah laku yang tidak diingini. Anda disyorkan untuk menggunakan hantaran eksplisit pada bila-bila masa yang sesuai untuk mengelakkan isu yang berpotensi.
Atas ialah kandungan terperinci Bagaimana Secara Tersirat Menukar Enum yang Ditaip Kuat kepada Int dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!