對於這個問題自己是比較清楚的,在分支比較多時,switch-case的效率肯定比if-else的要高許多,其原理類似於我們在優化某些程序時使用查表來代替算法計算一樣。
如果想進一步深究的話,可以查看GCC編譯之后的匯編代碼。
這里有兩篇Blog可以參考一下,致謝兩位作者。
1. switch與ifelse的效率問題
https://blog.csdn.net/kehui123/article/details/5298337
2. if else和switch的效率
https://blog.csdn.net/spy19881201/article/details/5851792
先記錄下這兩篇博文中的結論:
1. switch和if-else相比,由於使用了BinaryTree算法,絕大部分情況下switch會快一點,除非是if-else的第一個條件就為true.
2. 編譯器編譯switch與編譯if...else...不同,對switch-case會生成一個跳表,不管有多少case,都直接跳轉,不需要逐個比較查詢,注意這一部分內容其實在深入理解計算機系統這本書上有提及的。
3. 由於swtich-case在編譯處理時要生成跳表,會占用較多的代碼空間,當case常量分布范圍較大但實際的有效值又比較少的時候,switch-case的空間利用率會降低。
4. switch-case僅限於處理分支條件結果為常量的情況,對於較復雜的條件需要多做程序上的處理,在靈活性上不如if-else。
