Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjamin Laluan Eksklusif Constexpr if-else dalam C ?
Memastikan Laluan Constexpr if-else Eksklusif
Dalam klausa constexpr if-else, adalah penting untuk memastikan kes lain tidak pernah diambil. Secara tradisinya, seseorang mungkin menggunakan static_assert(false); untuk menimbulkan ralat dalam kes sedemikian. Walau bagaimanapun, pendekatan ini menimbulkan ralat kompilasi yang secara tidak dijangka menegaskan pernyataan itu sebagai benar.
Sebaliknya, untuk menguatkuasakan kes lain tidak dapat dicapai, pernyataan yang dibuang mesti dibuat bergantung pada parameter templat. Ini boleh dicapai menggunakan templat always_false, yang mengembalikan std::false_type tanpa mengira hujah templat.
template <class... T> constexpr std::false_type always_false{}; if constexpr (condition1) { // ... } else if constexpr (condition2) { // ... } else if constexpr (condition3) { // ... } else { static_assert(always_false<T...>); }
Penyelesaian ini berdasarkan fakta bahawa dalam C , program dianggap tidak berbentuk jika tiada pengkhususan yang sah boleh dijana untuk templat atau substatement constexpr if-else. Oleh itu, apabila klausa else menjadi tidak dapat dicapai, pengkompil akan mengeluarkan ralat kompilasi, memastikan kod tersebut kekal sah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjamin Laluan Eksklusif Constexpr if-else dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!