C++ 控制流:条件与循环

1 min read [C/C++零基础到大神] post #cpp#control-flow

控制流决定程序执行路径。

条件判断

if (score >= 60) {
    pass();
} else {
    retry();
}

if 的条件必须能转换为布尔值。

switch

switch (op) {
case '+':
    add();
    break;
case '-':
    sub();
    break;
default:
    unknown();
}

不要忘记 break,否则会继续执行后面的分支。

循环

for (int i = 0; i < n; ++i) {
    work(i);
}

遍历容器时更推荐范围 for:

for (const auto& item : items) {
    use(item);
}

分支不要写得太深

实际项目里,控制流最大的问题不是不会写 if,而是嵌套太深后读不懂。比如连续三四层 if 会让人很难判断某个变量在当前分支下到底满足什么条件。我的习惯是尽量使用提前返回:

bool valid(User user) {
    if (!user.active) return false;
    if (user.name.empty()) return false;
    if (user.age < 0) return false;
    return true;
}

这样代码从上往下读,失败条件一目了然。

循环里的边界

循环最容易出错的是边界。i < ni <= n 只差一个等号,但结果可能是数组越界。写循环前先用自然语言说清楚:“我要访问哪些下标?”如果答案是 0n - 1,那么条件通常就是 i < n

小练习

写一个程序统计数组里的最大值、最小值和平均值。要求分别用普通 for 和范围 for 写一遍,对比两种写法的可读性。

评论

...

正在读取评论。