Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjamin Laluan Eksklusif Constexpr if-else dalam C ?

Bagaimanakah Saya Boleh Menjamin Laluan Eksklusif Constexpr if-else dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-27 17:15:13242semak imbas

How Can I Guarantee Exclusive Constexpr if-else Paths in 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!

Kenyataan:
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