C++ 条件语句:`if` 与 `switch` 用法全览(六十五)

一、if 语句

1. 基本语法

if (condition)
    statement1;
else
    statement2;
  • condition:任何可转换为 bool 的表达式或自 C++17 起的初始化语句。
  • statement1 / statement2:可以是一条语句,也可以是一对 {} 括起来的块。
1.1 简单 if
if (x > 0)
    std::cout << "Positive\n";

只在条件为真时执行单条语句。

1.2 if...else
if (grade < 60)
    letter = "F";
else
    letter = "P";

条件为假时走 else 分支。

2. if 嵌套与“悬垂 else”

多层 if 嵌套时,else 总是匹配最近那个尚未匹配的 if

if (a)
    if (b)
        action1();
    else    // 悬垂 else:匹配的是内层 if(b),而非外层 if(a)
        action2();
  • 解决办法:始终使用大括号 {} 显式标明意图
if (a) {
    if (b)
        action1();
} else {
    action2();  // 现在清楚是与外层 if(a) 配对
}

3. C++17 的初始化语法

if (std::string line = readline(); !line.empty()) {
    // 可以在同一对括号里先“初始化”再“判空”
    std::cout << line << "\n";
}
// line 在此已超出作用域
  • 语法:if ( init-statement ; condition )
  • 在判断前就把值或对象搞定,只在一个小范围内可见。

二、switch 语句

当你的分支依据是一个整数或枚举表达式的多个“离散值”时,用 switch 更简洁高效:

switch (expr) {
  case 0:
    // 处理 expr==0
    break;
  case 1:
  case 2:
    // 处理 expr==1 或 expr==2
    break;
  default:
    // 处理其他情况
}

1. 结构与要点

  1. expr 必须是整型或枚举类型。
  2. 每个 case 后面跟一个常量表达式,不可重复。
  3. break 语句用来退出 switch,否则会“贯穿”执行下一个 case
  4. default 分支可选,处理所有未匹配值。

2. 避免误用

  • 别忘了 break

    switch (x) {
      case 1:
        doA();
        // fall-through?
      case 2:
        doB();
        break;
    }
    

    如果不小心漏写 breakcase 1 会执行完 doA() 后直接“穿透”到 case 2

  • 有意贯穿,写明注释
    C++17 起可用 [[fallthrough]]; 明确标注:

    case 1:
      doA();
      [[fallthrough]];  // 我确实想让它继续执行 case 2
    case 2:
      doB();
      break;
    

三、最佳实践

  1. 尽量将变量作用域缩小
    if / switch 条件或初始化里定义的小变量,下文用不到时可自动销毁。

  2. 花括号不嫌多
    无论是单条语句还是多条语句,都强制使用 {},避免“悬垂 else”与漏加 break

  3. 清晰表达意图

    • 嵌套分支时,及时重构成函数或使用 else if
    • switch 做值分支,if 处理区间或复杂条件。
  4. 注重可读性胜于过度简洁
    即使能写成一行 ?: 或链式 if,也要考虑下次维护时同事(或未来的你)能否轻松理解。

掌握 ifswitch,就是掌握 C++ 代码的“神经中枢”——决定程序走哪条路。希望本文能帮助你在写条件逻辑时,既少犯错,又能保持简洁清晰。如果有什么经验或者疑问,欢迎在评论区交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello.Reader

请我喝杯咖啡吧😊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值