switch語句中,case的後面為什麼必須是常量?

時間 2021-06-02 11:45:40

1樓:gpgkd906

在大部分動態語言中,case後面是可以接變數甚至是表示式的。

比如說你可以這麼做:

vara=0

,b=1

,c=3

;switch

(true

)基本上這種型別都可以用if else來寫,但是用switch寫可讀性會好一些。

如果需要效能的話可以自己手動實現乙個跳轉表,現有的動態語言一般都支援一等函式和屬性列表,跳轉表的實現也並不是特別難。

所以其實也就是乙個取捨的問題。

2樓:Fermat

因為C語言中的 switch 不是 if 的替代品。

編譯時會對 switch 進行優化,根據 case 標籤後面的常量值,生成跳轉表,只經過少數次數的比較,就可以跳到對應標籤下面。所以,標籤也是不能重複的。如果允許變數,switch 只能退化成跟一連串的 if else, 對於乙個資料也只能從頭到尾地進行比較,也就失去了 switch 的意義。

跳轉表和逐個比較,這兩種方式的複雜度差很多。

這也是 python 沒有引入和 C 語言裡面的 switch case 相對應的控制結構的乙個原因。

goto 語句飽受詬病,有什麼地方是必須的嗎?

Kevin Li 就本人目前接觸過的工程,都沒有一定用goto的需求。一旦遇到exception,通常採用throw try catch的方式來處理 當年的開發環境不像現在的IDE,整個goto乙個ctrl就能找到在哪,一會上跳一會下跳,很可能你寫了個goto過不久就迷失掉了。現在的環境下沒必要教條...

為什麼被動句中的D structure是這樣的?

寫了半天才發現好像走題了 其實換成 The door is opened.更好理解。因為 the door 放在那兒它自己不會 open 啊。那必然是 open 的賓語,而且有個 Agent 把它開啟的。同理 the girl 自己不能 kiss 自己。而且語義上想表達的也不是 The girl i...

這個英語句子?為什麼這樣是錯的?

葉明 activities明顯多餘,直接用celebration celebrations 意思含event 或者observances,這裡複數好些。動詞部分拆成兩個動詞好些,extend這裡作用不大,可以去掉簡單點用take place就好,take place from Chinese New...