【C++基础】第三十二课:跳转语句

break语句,continue语句,goto语句

Posted by x-jeff on November 6, 2021

【C++基础】系列博客为参考《C++ Primer中文版(第5版)》C++11标准)一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.前言

C++语言提供了4种跳转语句:break、continue、goto和return。

return语句后续博客会有介绍,在此不再详述。

2.break语句

break语句负责终止离它最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始继续执行。

break语句只能出现在迭代语句或者switch语句内部(包括嵌套在此类循环里的语句或块的内部)。break语句的作用范围仅限于最近的循环或者switch。

3.continue语句

continue语句终止最近的循环中的当前迭代并立即开始下一次迭代。continue语句只能出现在for、while和do while循环的内部,或者嵌套在此类循环里的语句或块的内部。

❗️和break语句类似的是,出现在嵌套循环中的continue语句也仅作用于离它最近的循环。和break语句不同的是,只有当switch语句嵌套在迭代语句内部时,才能在switch里使用continue。

continue语句中断当前的迭代,但是仍然继续执行循环。对于while或者do while语句来说,继续判断条件的值;对于传统的for循环来说,继续执行for语句头的expression;而对于范围for语句来说,则是用序列中的下一个元素初始化循环控制变量。

4.goto语句

goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。goto语句的语法形式是:

1
goto label;

其中,label是用于标识一条语句的标示符。带标签语句是一种特殊的语句,在它之前有一个标示符以及一个冒号:

1
end: return;//带标签语句,可以作为goto的目标

标签标示符独立于变量或其他标示符的名字,因此,标签标示符可以和程序中其他实体的标示符使用同一个名字而不会相互干扰:

1
2
3
4
5
6
7
8
9
10
11
12
int begin = 100;
int i = 0;
begin:
i = i + 1;
cout << i << endl;
if (i < 2)
    goto begin;
cout << begin << endl;
//输出为:
//1
//2
//100

⚠️goto语句和控制权转向的那条带标签的语句必须位于同一个函数之内。

和switch语句类似,goto语句也不能将程序的控制权从变量的作用域之外转移到作用域之内:

1
2
3
4
5
6
	//...
	goto end;
	int ix = 10;//错误:goto语句绕过了一个带初始化的变量定义
end:
	//错误:此处的代码需要使用ix,但是goto语句绕过了它的声明
	ix = 42;