程序运行时,CPU 自 main()
顶部开始执行,按默认的先后顺序执行若干语句,最终在 main()
结束后终止。CPU 所执行的这一特定语句序列称为程序的执行路径(简称路径)。
观察下列程序:
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x{};
std::cin >> x;
std::cout << "You entered " << x << '\n';
return 0;
}
该程序的执行路径依次为第 5、7、8、10、12 行。这是一个典型的直线式程序:每次运行均沿同一路径,以相同顺序执行相同语句。
然而,我们往往并不满足于这种固定行为。例如,当提示用户输入而用户给出无效数据时,理想做法应是要求用户重新输入。直线式程序无法实现此需求。事实上,用户可能连续多次输入无效数据,因此需要重新提示的次数在运行前无法预知。
所幸,C++ 提供了多种控制流语句(亦称流程控制语句),使程序员得以改变程序的正常执行路径。此前你已见过 if
语句(见 4.10 节《if 语句简介》)——仅在条件表达式为真时才执行相应语句。
当控制流语句使执行点跳转至非顺序的语句时,该过程称为分支。
控制流语句分类
类别 | 含义 | C++ 实现方式 |
---|---|---|
条件语句 | 仅在满足某条件时执行某段代码。 | if 、else 、switch |
跳转语句 | 通知 CPU 从另一位置开始执行。 | goto 、break 、continue |
函数调用 | 跳转至另一处并返回。 | 函数调用、return |
循环语句 | 重复执行某段代码零次或多次,直至满足某条件为止。 | while 、do-while 、for 、范围 for |
终止语句 | 终止程序。 | std::exit() 、std::abort() |
异常处理 | 专为错误处理设计的特殊控制流结构。 | try 、throw 、catch |
除异常处理外,本章将详尽讲解上述所有类别。异常处理将在后续第 27 章专章阐述。
在此之前,程序可完成的工作相当有限。掌握程序流程控制(特别是循环)后,你将能够实现任何有趣的功能!从此不再局限于示例程序——你将能够编写真正具有实用价值的软件。
真正的乐趣由此开始。让我们立即启程!