2.12.2. 基本構文#
ここでは、C++ における代表的な制御構文として、if 構文、for 構文、while 構文、および switch 構文について説明します。
2.12.2.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.2.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.2.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.2.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;
break;
case 2:
std::cout << "a is 2." << std::endl;
break;
default:
std::cout << "a is not 1 or 2." << std::endl;
}
return 0;
}
なお、通常、各 case ブロックの末尾には break 文を記述します。これは、該当する case の処理が終わった後に、switch 文全体を抜けるためです。
もし break 文がない場合、該当する case 以降の処理がすべて実行される「フォールスルー」という挙動になります。そのため、a が 2 の場合は、case 2 の処理だけでなく、default の処理も続けて実行されます。噂話は、止めどころを間違えると、関係ない人のところまで届きます。break を忘れないように。