今回は、C++での「if と switch の使い分け」について解説していきます。
「どっちを使えばいいの?」「switchってどんな時に使うの?」と迷ったことはありませんか?
この記事を読み終えると、あなたはifとswitchを正しく使い分けられるようになると思いますので、ぜひ最後まで読んでいただけると嬉しいです。
if文とswitch文の違い
if文はどんな条件でも書ける万能な分岐です。
switch文は1つの変数の値が何かで分岐する専門家です。
それぞれの特徴を詳しく見ていきましょう。
if文の特徴
if文は、柔軟性が高く、どんな条件でも書けるのが最大の特徴です。
if文で使える条件の例
▼範囲の判定
#include <iostream>
int main() {
int score = 75;
if (score >= 60 && score < 80) {
std::cout << "良\n";
}
return 0;
}▼複数の変数を組み合わせ
#include <iostream>
int main() {
int age = 20;
bool hasLicense = true;
if (age >= 18 && hasLicense == true) {
std::cout << "運転できます\n";
}
return 0;
}▼文字列の比較
#include <iostream>
#include <string>
int main() {
std::string name = "Tanaka";
if (name == "Tanaka") {
std::cout << "田中さんですね\n";
}
return 0;
}▼小数の判定
#include <iostream>
int main() {
double height = 170.5;
if (height >= 170.0) {
std::cout << "170cm以上\n";
}
return 0;
}このように、if文はあらゆる条件に対応できます。
if文のデメリット
分岐が多いと、else ifが連続して読みにくくなるのが欠点です。
▼main.cpp
#include <iostream>
int main() {
int cmd = 3;
// こうなると見づらい...
if (cmd == 1) {
std::cout << "新規作成\n";
} else if (cmd == 2) {
std::cout << "開く\n";
} else if (cmd == 3) {
std::cout << "保存\n";
} else if (cmd == 4) {
std::cout << "閉じる\n";
} else if (cmd == 5) {
std::cout << "終了\n";
} else {
std::cout << "無効なコマンド\n";
}
return 0;
}このような場合、switchを使う方が見やすくなります。
switch文の特徴
switch文は、1つの変数の値が何かで分岐するときに使います。
▼main.cpp
#include <iostream>
int main() {
int cmd = 3;
switch (cmd) {
case 1:
std::cout << "新規作成\n";
break;
case 2:
std::cout << "開く\n";
break;
case 3:
std::cout << "保存\n";
break;
case 4:
std::cout << "閉じる\n";
break;
case 5:
std::cout << "終了\n";
break;
default:
std::cout << "無効なコマンド\n";
}
return 0;
}実行結果
保存
if文よりも構造が明確で読みやすくなっていますね。
switchで使える型
switchで使える型には制限があります。
- ✅ 整数型:int, char, short, long など
- ✅ 列挙型:enum
- ❌ 小数型:double, float(使えない)
- ❌ 文字列:std::string(基本的に使えない)
▼使えない例
#include <iostream>
int main() {
// これはエラー!
double x = 1.5;
// switch (x) { // 小数はダメ
// case 1.5:
// break;
// }
// これもエラー!
std::string s = "hello";
// switch (s) { // 文字列はダメ
// case "hello":
// break;
// }
return 0;
}小数や文字列で分岐したい場合は、if文を使う必要があります。
breakを忘れると?(フォールスルー)
switchでは、breakを書かないと次のcaseも実行されてしまいます。
▼main.cpp
#include <iostream>
int main() {
int n = 1;
switch (n) {
case 1:
std::cout << "1\n";
// breakがない!
case 2:
std::cout << "2\n";
break;
case 3:
std::cout << "3\n";
break;
}
return 0;
}実行結果
1
2
case 1だけでなく、case 2も実行されてしまいました。
これをフォールスルーと呼びます。
フォールスルーを活用する場合
フォールスルーは、複数のcaseで同じ処理をしたい時に便利です。
▼main.cpp
#include <iostream>
int main() {
char grade = 'B';
switch (grade) {
case 'A':
case 'B':
case 'C':
std::cout << "合格\n";
break;
case 'D':
case 'F':
std::cout << "不合格\n";
break;
}
return 0;
}実行結果
合格
これは「A, B, C のどれかなら合格」という意味になります。
実践的な使い分け例
曜日による処理(switch推奨)
▼main.cpp
#include <iostream>
int main() {
int dayOfWeek = 3; // 1=月, 2=火, 3=水...
switch (dayOfWeek) {
case 1:
case 2:
case 3:
case 4:
case 5:
std::cout << "平日\n";
break;
case 6:
case 7:
std::cout << "週末\n";
break;
default:
std::cout << "無効な曜日\n";
}
return 0;
}成績の判定(if推奨)
▼main.cpp
#include <iostream>
int main() {
int score = 85;
// 範囲判定なのでifを使う
if (score >= 90) {
std::cout << "優\n";
} else if (score >= 80) {
std::cout << "良\n";
} else if (score >= 70) {
std::cout << "可\n";
} else {
std::cout << "不可\n";
}
return 0;
}if vs switch 比較表
| 比較項目 | if | switch |
|---|---|---|
| 範囲の判定(<, >= など) | ○ | × |
| 複数条件(&&, ||) | ○ | × |
| 文字列の比較 | ○ | × |
| 小数の比較 | ○ | × |
| 整数値の一致判定 | ○ | ○ |
| 分岐が多いときの見やすさ | △ | ○ |
| 処理速度(分岐が多い場合) | 普通 | 速いことが多い |
どちらを使うべき?
以下の基準で選びましょう。
| こういうとき | 使うべきもの |
|---|---|
| 範囲や複雑な条件で判定したい | if |
| 文字列や小数で分岐したい | if |
| 整数や文字の値で3つ以上に分岐 | switch |
| メニュー選択、曜日、状態遷移など | switch |
| 迷ったら | if |
switchは使える場面が限られますが、ハマると断然見やすくなります!
まとめ
ifとswitchの使い分けをまとめます。
- if:どんな条件でも書ける万能型。範囲や文字列、複雑な条件に対応
- switch:整数値による分岐専門。分岐が多いと見やすい
- switchで使えるのは整数型とenumのみ
- switchではbreakを忘れずに(フォールスルーに注意)
- 迷ったらifを使えばOK
これでifとswitchの使い分けはバッチリですね!
適切な方を選んで、読みやすいコードを書いてみてください。
ここまで読んでくださり、ありがとうございました。
この記事が皆様の学習に役立てば幸いです。

