天天看點

switch範圍判斷、switch區間判斷

大家都知道switch 語句中的 expression 必須是一個整型或枚舉類型,或者是一個 class 類型,其中 class 有一個單一的轉換函數将其轉換為整型或枚舉類型。

很多情況下需要用到case區間判斷,比如0-3的,大家可能回寫成這樣:

case 0:
case 1:
case 2:
case 3:
  func();
  break;
           

今天發現還有這種寫法,用起來還是很有優勢的,用的好可以減少寫代碼、編譯等時間。

但是這個方法不一定在所有編譯器下有效,我這邊用的是gcc 4.8.5,代碼如下沒有問題。

#include <iostream>

int main(int argc, char* argv[])
{
    int i = 5;
    switch (i) {
    case 0 ... 3:
        std::cout << "0-3: " << i << std::endl;
        break;
    case 4 ... 6:
        std::cout << "4-6: " << i << std::endl;
        break;
    case 7 ... 9:
        std::cout << "7-9: " << i << std::endl;
        break;
    case 10:
        std::cout << "10" << i << std::endl;
    default:
        break;
    }
    return 0;
}