我一直在課堂上開展一個項目,迄今爲止我寫的代碼工作得很好。我的代碼的很大一部分使用嵌套的switch語句。雖然我打算按照現在的方式進行操作,但我希望知道將來的參考是否嵌套的switch語句通常被忽略。在C++中使用嵌套切換語句是不好的做法嗎?
1
A
回答
2
正如你可能已經注意到的那樣,因爲你問,他們不是最容易遵循的事情,所以我通常會盡可能避免它們。
這並不意味着你不能做這種控制流 - 訣竅是將案例分解成自己的功能。這讓有人閱讀頂級開關,理解它的分支以及發生了什麼(因爲你當然會給你的函數帶來好的描述性名稱),然後他們可以依次檢查每個函數,以便了解下一級是否需要。
爲了避免以前不必要的函數調用的代價,可以標記函數inline
以使編譯器有效地將函數的主體複製到調用站點。
它最終會看起來像這樣令人難以置信的genericised和不完整的骨架:
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
聲明或兩個聲明正是你需要的!
0
一般來說,如果switch語句對於處理器的計算而言更加「昂貴」,因爲每次跳轉時都要強制彙編器進行新的猜測(以瞭解下一條指令的內容) 。如果您主要關心的是算法效率,儘量少用。
相關問題
- 1. 在if語句中使用函數是不好的做法嗎?
- 2. 嵌套try/catch語句不好嗎?
- 3. PHP中的嵌套操作符。這是不好的做法嗎?
- 4. 嵌套的jQuery切換語句
- 5. 使用嵌套異常是一種很好的做法嗎?
- 6. 更改if語句中的狀態是不好的做法嗎?
- 7. 在rm -rf語句中使用環境變量是不好的做法嗎?
- 8. 在任何循環塊中使用return語句是不好的做法嗎?
- 9. 切換語句而不是多重嵌套if - else?
- 10. 嵌套渲染循環是不好的做法嗎?
- 11. 嵌套表單是不好的做法嗎?
- 12. 在使用Linq EF時有很多selectMany語句是不好的做法嗎?
- 13. 在類級變量上使用using語句是不好的做法嗎?
- 14. 嵌套使用語句有用嗎?
- 15. 使用* str ++是不好的做法嗎?
- 16. 使用collections.OrderedDict是不好的做法嗎?
- 17. 這是不好的做法嗎? C++
- 18. 在C語言中切換語句
- 19. 在URI路徑中放置句點是不好的做法嗎?
- 20. 在迭代中放置條件語句是不好的做法嗎?
- 21. 使用「或」語句嵌套「和」語句
- 22. 在scala中嵌套「if」/「match」語句:更好的方法?
- 23. 在C++代碼中使用C風格的註釋是不好的做法嗎?
- 24. 做while循環嵌套if語句在C++中
- 25. 替換嵌套if語句
- 26. 重新使用父語句中的嵌套SQL語句在MySQL
- 27. 嵌套if語句C++
- 28. 從頭開始嵌套函數是不是很好的做法?
- 29. 在IF語句中嵌套Case語句
- 30. Singleton模式的使用在android中是不好的做法嗎?
難道你不想顯示代碼嗎? –
我認爲這是基於意見的方式。例如,我絕對討厭開關,從不使用它們。我使用if-else-if的鏈。這讓許多人上了一堵牆,他們的轉變也是如此。我可以想象嵌套開關*特別*壞,但我討厭單個開關。看到問題了嗎? – 2016-03-15 08:49:15
這真的歸結爲你在做什麼。有時候這是最好的選擇。有時候這是不必要的。如果你能避免它,通常不會嵌套循環便宜。但是,代碼本身的複雜性增加了很多,所以如果嵌套循環是正確的方法,那麼很好。但是,如果您開始獲取超過3個嵌套循環,請嘗試使其遞歸。 –