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
Lepaskan: 2024-11-27 17:15:13
asal
291 orang telah melayarinya

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

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 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan