当程序运行时,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、ranged-for |
中止 | 终止程序。 | std::exit()、std::abort() |
异常 | 一种特殊类型的流控制结构,旨在用于错误处理。 | try、throw、catch |
我们将在本章中详细介绍所有这些类别,但异常(哈)除外,我们将用一整个未来的章节(第 27 章)来专门讨论它们。
在本章之前,程序可以做的事情数量相当有限。能够控制程序的流程(特别是使用循环)使得任何数量的有趣事情成为可能!你将不再局限于玩具程序——你将能够编写具有实际用途的程序。
真正的乐趣从这里开始。那么,让我们开始吧!