Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memastikan Tiada Klausa `else` Pernah Dilaksanakan dalam Rantaian C `constexpr if-else`?

Bagaimanakah Saya Boleh Memastikan Tiada Klausa `else` Pernah Dilaksanakan dalam Rantaian C `constexpr if-else`?

Linda Hamilton
Lepaskan: 2024-11-27 11:10:09
asal
718 orang telah melayarinya

How Can I Ensure No `else` Clause is Ever Executed in a C   `constexpr if-else` Chain?

Mencegah Ketaksempurnaan Klausa Constexpr If-Else

Dalam C , seseorang mungkin menghadapi keperluan untuk menegaskan bahawa semua constexpr jika keadaan dalam pernyataan if-else dipenuhi. Tanpa penegasan sedemikian, klausa else boleh diambil secara tidak dijangka.

Pertimbangkan kod berikut:

if constexpr(condition1){
    ...
} else if constexpr (condition2) {
   ....
} else if constexpr (condition3) {
  ....
} else {
    // I want the else clause never taken. But I heard the code below is not allowed
    static_assert(false);
}
Salin selepas log masuk

Seseorang mungkin menganggap bahawa klausa else tidak akan diambil kerana semua syarat harus saling eksklusif. Walau bagaimanapun, mengikut piawaian C, penegasan sedemikian tidak dibenarkan.

Penyelesaian: Ketergantungan Templat

Untuk mengelakkan klausa lain daripada diambil, seseorang mesti membuat pernyataan yang dibuang bergantung pada parameter templat. Ini boleh dicapai menggunakan kod berikut:

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

Penaakulan

Piawaian C menyatakan bahawa program tidak terbentuk jika tiada pengkhususan yang sah dapat dijana untuk templat atau substatement dalam templat. Dengan membuat pernyataan yang dibuang bergantung pada parameter templat, pengkompil boleh memastikan bahawa tiada pengkhususan yang sah boleh dijana apabila tiada syarat dipenuhi, dengan berkesan menghalang klausa lain daripada diambil.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Tiada Klausa `else` Pernah Dilaksanakan dalam Rantaian C `constexpr if-else`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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