2.12.1. 文法#
ここでは、C++ における代表的な制御構文として、if 構文、for 構文、while 構文、および switch 構文について説明します。
2.12.1.1. if 構文#
if、else if、else を用いた条件分岐は、次のように記述します。条件式が上から順に評価され、最初に真となったブロックのみが実行されます。
#include <iostream>
int main() {
int a = 2;
if (a == 1) {
std::cout << "a is 1." << std::endl;
} else if (a == 2) {
std::cout << "a is 2." << std::endl;
} else {
std::cout << "a is not 1 or 2." << std::endl;
}
return 0;
}
この例では、変数 a の値に応じて表示内容が切り替わります。a が 2 なので、else if の条件が真となり、そのブロックが実行されます。
2.12.1.2. for 構文#
for 文は、あらかじめ繰り返し回数や範囲が決まっている場合に用いるループ構文です。初期化、継続条件、更新処理を 1 行で指定できます。
#include <iostream>
int main() {
for (int i = 0; i < 5; i++) {
std::cout << "i = " << i << std::endl;
}
return 0;
}
この例では、i が 0 から 4 まで変化しながら、計 5 回ループが実行されます。
2.12.1.3. while 構文#
while 文は、条件式が真である間、処理を繰り返します。繰り返し回数が事前に決まっていない場合によく利用されます。
#include <iostream>
int main() {
int i = 0;
while (i < 5) {
std::cout << "i = " << i << std::endl;
i++;
}
return 0;
}
この例では、i が 5 未満である間、ループが継続されます。ループ内で i++ により値を更新しているため、無限ループにはなりません。
while 構文と似たものに do while 構文があります。while は条件を先に判定してから処理を行いますが、do while はまず 1 回処理を実行してから条件判定を行います。
#include <iostream>
int main() {
int i = 0;
do {
std::cout << "i = " << i << std::endl;
i++;
} while (i < 5);
return 0;
}
この場合、条件に関わらず、少なくとも 1 回は処理が実行される点が while との違いです。
2.12.1.4. switch 構文#
複数の条件に基づいて分岐処理を行う場合、if や else if を並べる方法のほかに、switch 構文を用いることもできます。switch の後ろに評価したい変数を指定し、case 文でその変数が取りうる値ごとの処理を記述します。どの条件にも当てはまらない場合は、default が実行されます。
#include <iostream>
int main() {
int a = 2;
switch(a) {
case 1:
std::cout << "a is 1." << std::endl;
case 2:
std::cout << "a is 2." << std::endl;
default:
std::cout << "a is not 1 or 2." << std::endl;
}
return 0;
}
このコードでは break 文が書かれていないため、該当する case 以降の処理がすべて実行される「フォールスルー」という挙動になります。したがって、a が 2 の場合は、case 2 の処理だけでなく、default の処理も続けて実行されます。通常は各 case の末尾に break を記述し、意図しないフォールスルーを防ぐことが一般的です。