[英]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.