簡體   English   中英

在 C++ 中使用嵌套 switch 語句是不好的做法嗎?

[英]is it bad practice to use nesting switch statments in c++?

我一直在課堂上從事一個項目,到目前為止我編寫的代碼運行良好。 我的大部分代碼使用嵌套的 switch 語句。 雖然我將按照現在的方式改變它,但我想知道嵌套的 switch 語句是否通常不受歡迎以供將來參考。

正如您可能已經注意到的那樣,因為您問過,它們並不是最容易遵循的東西,所以我通常會盡量避免它們。

這並不意味着您不能執行那種控制流 - 技巧是將案例拆分為它們自己的功能。 這讓人們可以閱讀頂層 switch,理解它的分支和發生的事情(因為你當然會給你的函數指定好的、描述性的名稱),然后他們可以依次檢查每個函數以了解下一級,如果他們需要的話.

為了避免以前不必要的函數調用成本,您可以將函數標記為inline以使編譯器有效地將函數體復制到調用站點。

它最終看起來像這個令人難以置信的通用化和不完整的骨架:

int main() {
    int thing;
    char second_level_thing;

    // various code which produces thing and second_level_thing

    switch (thing) {
    case 0: do_zero_case(second_level_thing); break;
    case 1: do_one_case(); break;
    default: do_default_case(); break;
    }

    // the rest of main
}

inline void do_zero_case(char second_level_thing) {
   switch (second_level_thing) {
     case 'a': // 0 -> a branch code
     // etc...
   }
}

// etc...

不要叫你的函數之類的東西do_zero_case 以其實際作用命名它們。

我要補充的是,如果多個級別正在檢查相同的值,那么會發生一些非常奇怪的事情。

通過使用 OOP 技術(各種形式的虛擬方法調用)、模板、高階函數等,還可以使用替代控制流。 有時,一兩個簡單的switch語句正是您所需要的!

一般來說,就處理器的計算而言,if 和 switch 語句更“昂貴”,因為每次從一個案例跳轉到另一個案例時,您都會強制匯編器進行新的猜測(對於下一條指令將是什么)。 如果您最關心的是算法效率,請盡量少使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM