首頁 > 後端開發 > C++ > 如何確保 C `constexpr if-else` 鏈中不會執行 `else` 子句?

如何確保 C `constexpr if-else` 鏈中不會執行 `else` 子句?

Linda Hamilton
發布: 2024-11-27 11:10:09
原創
717 人瀏覽過

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

防止不滿足Constexpr If-Else 子句

在C 中,可能需要斷言所有constexpr if 條件滿足if-else 語句滿足if-else 。如果沒有這樣的斷言,則 else 子句可能會意外地被採用。

考慮以下程式碼:

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);
}
登入後複製

人們可能會認為 else 子句永遠不會被採用,因為所有條件都應該是相互的獨家的。然而,根據 C 標準,這樣的斷言是不允許的。

解決方案:模板依賴

為了防止 else 子句被採用,必須將丟棄依賴於模板參數的語句。這可以使用以下程式碼來實現:

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>);
}
登入後複製

推理

C 標準規定,如果無法產生有效的專門化,則程式是格式錯誤的。模板或模板內的子語句。透過使廢棄語句依賴於模板參數,編譯器可以確保在不滿足任何條件時無法產生有效的特化,從而有效防止 else 子句被採用。

以上是如何確保 C `constexpr if-else` 鏈中不會執行 `else` 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板