switch-case

switch-case在C++中,可視為一種優雅的if-else-if

if (Expression == 1)
{
    //Statement1
}
else if (Expression == 2
{
    //Statement2
}
else
{
    //Statement
}

同義於

switch (Expression)
{
    case 1:
        //Statement1
        break;
    case 2:
        //Statement2
        break;
    default:
        //Statement
}

if-else無法轉成switch-case的情況

Expression的結果會直接與case後面的「結果」做比對,看看是否相同。在此必須注意,無法比對floatdouble這種浮點數,很不幸的是浮點數本質上代表著「誤差」,跟據IEEE754的定義,也是存在著誤差容訊範圍,又因為各家的complier的不同,浮點數的誤差又略為不同。

所以,若要使用浮點數做if-else的判斷時,建議使用範圍(>, >=, <, <=),而非==,比較不會造成無法預期的情況發生。

特別注意break

在C++中,不用break跳出時,會緊接著下一個case執行,在這種情況,必須寫註解說明。這種情況,儘可能的避免。

case排序的建議:

由上到下

  1. 依字母或數字順序(A~Z, 0~9)

  2. 先置入正常,再置入例外(正常~例外)

  3. 先置入常見,再置入不常見(常見~不常見)

default的妙用

要用所有的case包含所有的情況,這時default就要拿來處理「絕對不應該發生」的情況。

switch (是否為)
{
    case 情況一:
        //Statement1
        break;
    case 情況二:
        //Statement2
        break;
    default:
        //不該發生的情況
        //用assert(0) hight-light
}

參考自《Code Complete2》

Last updated

Was this helpful?