ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
C++のif文は、指定した条件が真(true)か偽(false)かによって実行する処理を切り替える、条件分岐の基本となる制御構文です。if (条件) { 真のときの処理 } の形で書き、条件が成り立つ場合だけブロック内が実行されます。else や else if を組み合わせることで、複数の分かれ道を表現できます。
| この記事の要点 |
|---|
|
if文の基本構文
もっとも単純なif文は、条件が真のときだけ処理を行う形です。条件式は丸括弧 ( ) で囲み、実行する処理は波括弧 { } のブロックにまとめます。
|
#include <iostream> int main() { int score = 80; if (score >= 60) { std::cout << "合格" << std::endl; } } |
この例では score が 60 以上のときだけ「合格」と表示されます。条件式 score >= 60 の評価結果は true か false のいずれかになり、true の場合だけ直後の波括弧で囲まれたブロックが実行されます。false のときは何も起こらず、if文の次の行へ処理が進みます。
条件が偽のときにも別の処理を行いたい場合は、else を続けて書きます。else には条件を書かず、「if の条件が成り立たなかったすべての場合」を受け持ちます。
|
if (score >= 60) { std::cout << "合格"; } else { std::cout << "不合格"; } |
条件が成立すれば if 側のブロック、成立しなければ else 側のブロックが実行され、必ずどちらか一方だけが動きます。
else ifで複数の条件を分岐する
3通り以上に分けたい場合は else if を重ねます。上から順に条件が評価され、最初に true になったブロックだけが実行されます。それ以降の条件は評価されません。
|
int score = 75; if (score >= 90) { std::cout << "優"; } else if (score >= 70) { std::cout << "良"; } else if (score >= 60) { std::cout << "可"; } else { std::cout << "不可"; } |
上の例で score が 75 の場合、最初の score >= 90 は偽、次の score >= 70 が真となるため「良」が表示されます。一度どこかの条件が真になると、それ以降の else if や else は評価されずに飛ばされる点が重要です。条件の順序を「大きい値から」整理しておくと、意図しない分岐を防ぎやすくなります。たとえば score >= 60 を先頭に置いてしまうと、90点でも70点でも最初の条件で止まり、すべて「可」になってしまいます。
比較演算子の一覧
if文の条件式では、2つの値を比べる比較演算子がよく使われます。結果は必ず bool 型(true または false)になります。
| 演算子 | 意味 | 例(aが3のとき) | 結果 |
|---|---|---|---|
== |
等しい | a == 3 |
true |
!= |
等しくない | a != 3 |
false |
< |
より小さい | a < 5 |
true |
> |
より大きい | a > 5 |
false |
<= |
以下(小さいか等しい) | a <= 3 |
true |
>= |
以上(大きいか等しい) | a >= 4 |
false |
「等しい」を判定するのは = ではなく == です。= は代入演算子であり、意味がまったく異なります。この取り違えは後述の落とし穴で詳しく扱います。
なお、&&(かつ)や ||(または)、!(否定)といった論理演算子で複数の条件を組み合わせる方法は、別記事の if文の論理演算子 で詳しく解説しています。
波括弧の省略
処理が1文だけのときは波括弧 { } を省略でき、if (条件) 処理; のように書けますが、行を追加した際にバグを招きやすいため、原則として波括弧は省略せず常に付けることが推奨されます。
|
// 省略形(1文のみ有効) if (x > 0) std::cout << "正の数";
// 推奨:常に波括弧を付ける if (x > 0) { std::cout << "正の数"; } |
三項演算子(条件演算子)
「条件によって値を選ぶ」だけの単純な分岐は、三項演算子 ?: で1行に書けます。条件 ? 真のときの値 : 偽のときの値 という形で、式として値を返すのが特徴です。
|
int a = 5, b = 8; int max = (a > b) ? a : b; // 大きい方をmaxへ std::cout << max; // 8 |
これは if/else で a > b なら max = a、そうでなければ max = b と書くのと同じ結果になります。短く書ける反面、分岐の中で複数の処理を行う場合や条件が複雑な場合は、可読性のため通常のif文を使う方が適しています。
C++17のif初期化文
C++17以降では、条件を評価する前に変数を初期化できる「if初期化文」が使えます。if (初期化; 条件) という形で、セミコロンの前で宣言した変数はその if ~ else のブロック内でのみ有効になります。
|
if (auto x = compute(); x > 0) { std::cout << x; // ここでxが使える } // ここではxは使えない(スコープ外) |
変数の有効範囲(スコープ)を条件分岐の内側に限定できるため、関数を呼んだ戻り値をその場で判定するような場面で、不要な変数の漏れを防げます。同じ名前の変数を別の場所でも使いたいときに、名前の衝突を避けやすくなる利点もあります。
if文のネストと早期returnによる整理
if文の中にさらにif文を書く「ネスト(入れ子)」も可能です。ただし入れ子が深くなるほどコードは読みにくくなります。条件を満たさない場合に早めに処理を打ち切る「早期return」を使うと、ネストを浅く保てます。
|
// ネストが深い書き方 if (ok) { if (n > 0) { process(n); } }
// 早期returnで平坦化 if (!ok) return; if (n <= 0) return; process(n); |
どちらも結果は同じですが、後者は「処理を続ける条件」が上から並ぶため、読み手が把握しやすくなります。関数の冒頭で前提条件をチェックして弾く書き方は「ガード節」とも呼ばれ、可読性を高める定番の手法です。
つまずきやすい落とし穴
| 注意点 | 内容 |
|---|---|
= と == の取り違え |
if (x = 5) は「xに5を代入し、その結果(5)を条件とする」ため常に真になります。比較は必ず == を使います。多くのコンパイラは警告を出します。 |
| 波括弧省略によるバグ | 波括弧を省いたifに後から行を足すと、その行はif条件と無関係に常に実行されてしまいます。インデントが揃っていても結びつきません。 |
| 条件はboolに変換される | 条件式の値は bool に変換され、0 以外の数値やnullでないポインタは true 扱いです。if (ptr) はポインタがnullでないかの判定になります。 |
| 浮動小数点数の等値比較 | double などは誤差を含むため == での比較が意図通りにならないことがあります。差の絶対値が十分小さいかで判定するのが安全です。 |
とくに = と == の取り違えは、コンパイルが通ってしまうぶん発見が遅れがちです。コンパイラの警告を有効にしておくことが有効な対策になります。
動作する完全なコード例
|
#include <iostream> int main() { int n = 7; if (n % 2 == 0) { std::cout << n << " は偶数" << std::endl; } else { std::cout << n << " は奇数" << std::endl; } return 0; } |
出力結果
|
7 は奇数 |
よくある質問(FAQ)
Q. if文と三項演算子はどちらを使うべきですか?
条件によって1つの値を選ぶだけならば三項演算子が簡潔です。一方、分岐の中で複数の処理を行う場合や、条件が複雑で読みにくくなる場合は、通常のif文の方が可読性に優れます。迷ったときはif文を選ぶと無難です。
Q. else ifはいくつまで連ねられますか?
文法上の上限はなく、必要なだけ else if を連ねられます。ただし数が多くなると見通しが悪くなるため、整数値や列挙型を分岐の起点にする場合は switch 文への置き換えを検討すると整理しやすくなります。
Q. 条件式に数値をそのまま書くとどうなりますか?
if (n) のように書くと、n が 0 なら偽、0 以外なら真と判定されます。意図が伝わりにくいため、if (n != 0) のように比較演算子で明示する書き方が読みやすくなります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?