2.12.1. 文法#

ここでは、C++ における代表的な制御構文として、if 構文、for 構文、while 構文、および switch 構文について説明します。

2.12.1.1. if 構文#

ifelse ifelse を用いた条件分岐は、次のように記述します。条件式が上から順に評価され、最初に真となったブロックのみが実行されます。

#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 構文#

複数の条件に基づいて分岐処理を行う場合、ifelse 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 を記述し、意図しないフォールスルーを防ぐことが一般的です。