switch文の条件式がいずれのケースにも当てはまらない場合、以下のコードではdefault:
の次に位置するcase文case ControlSize_M:
が実行されます。
double ControlSizeOf(ControlSize size) {
switch (size) {
case ControlSize_S: return 1;
default:
case ControlSize_M: return 2;
case ControlSize_L: return 3;
}
}
ControlSizeOf(ControlSize_S); // 1
ControlSizeOf(ControlSize_M); // 2
ControlSizeOf(ControlSize_L); // 3
ControlSizeOf(-1); // 2
本来、defaultの直後に書くべきreturn文やbreak文を省略している所がミソです。
switch文にはbreak文省略時、次に書かれたcase文が暗黙的に呼ばれるという仕様があり、今回はそれを応用しています。
本来default: return 2; case ControlSize_M: return 2;
と書く所をdefault: case ControlSize_M: return 2;
と書くことが出来ますので、冗長なコードが避けられ、保守性も向上するというメリットがあります。
フォールスルー(fall through)
ちなみにswitch文のこの仕様はフォールスルー(fall through)と呼ばれています。当然defaultラベルだけでなく、caseラベル内でも有効な仕様ですので、以下の様なテクニックとして応用も可能です。
switch (operator) {
case '+': case '-': case '*': case '/': return "四則演算です";
case ',': case '|': return "区切り文字です";
case '(': case ')': return "カッコです";
default: case '\0': return "(未定義)";
}
ピンバック: switch文のブレース省略イディオム【波括弧省略の意外なテクニック】 | MaryCore