Penukaran Tersirat Enum yang Ditaip Kuat kepada Int
Dalam C , enum yang ditaip kuat ialah ciri yang agak baharu yang menyediakan keselamatan yang dipertingkatkan berbanding dengan tradisional enums. Satu perbezaan antara jenis ini ialah enum yang ditaip kuat tidak boleh ditukar secara tersirat kepada integer. Tingkah laku ini sengaja untuk mengelakkan penukaran yang tidak diingini.
Walau bagaimanapun, dalam senario tertentu, anda mungkin perlu menukar nilai enum yang ditaip kuat kepada integer. Dalam kes ini, anda boleh menggunakan pengendali static_cast. Walau bagaimanapun, anda mesti menyatakan secara eksplisit jenis integer asas dalam pelakon.
<code class="cpp">enum class b { B1, B2 }; int foo(int input) { return input; } int main(void) { int value = static_cast<int>(b::B2); // Explicit cast required std::cout << foo(value) << std::endl; }
Jika anda memilih untuk tidak menyatakan jenis asas secara eksplisit, anda boleh menggunakan fungsi templat seperti ini:
<code class="cpp">template <typename E> constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); } int main(void) { std::cout << foo(to_underlying(b::B2)) << std::endl; // No explicit cast needed }</code>
Dengan menggunakan fungsi templat ini, anda mengelak daripada menentukan jenis asas setiap kali anda perlu menukar nilai enum yang ditaip kuat kepada integer. Ia menyediakan penyelesaian yang lebih ringkas dan boleh diguna semula.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Enum yang Ditaip Kuat kepada Integer dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!