第5章 语句
5.1 简单语句
5.2 语句作用域
5.3 条件语句
5.4 迭代语句
5.5 跳转语句
5.6 try语句块和异常处理
5.1 简单语句
- 最简单的语句是
空语句;
- 块不以分号作为结束
5.2 语句作用域
- 定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了
5.3 条件语句
- if、if-else,注意使用花括号控制执行路径
- switch语句。
case标签
必须是整型常量表达式。顺序执行所有case分支,希望多值共享同一组操作,省略break语句。default标签
,如果没有任何一个case标签能匹配上switch表达式的值,程序将执行紧跟在default标签后面的语句
5.4 迭代语句
-
迭代语句。
while
和for
语句在执行循环体之前检查条件,do while
语句先执行循环体,再检查条件。 -
while(condition) statement
-
for(init-statement;condition;expression) statement
。for语句头中的多重定义;for语句头能省略init-statement、condition、expression中任何一个(或者全部)。范围for语句for(declaration : expression) statement
-
do statement while(condition);
5.5 跳转语句
break
作用范围仅限于最近的循环或者switchcontinue
终止最近的循环中的当前迭代并立即开始下一次迭代goto
无条件跳转到同一函数内到另一条语句return
5.6 try语句块和异常处理
- 异常处理包括:
throw表达式
、try语句块
、一套异常类
throw表达式
包含关键字throw和紧跟其后的一个表达式,其中表达式类型就是抛出的异常类型。表达式后面紧跟一个分号,构成一条表达式语句。try语句块
的通用语法形式是
try{
program-statements
}catch (expression-declaration){
handler-statements
}catch (expression-declaration){
handler-statements
} // ...
try语句块内声明的变量在块外部无法访问,在catch子句内也无法访问。
函数在寻找处理代码的过程中退出
, 一个try语句块可能调用了包含另一个try语句块的函数,新的try语句块可能调用了包含又一个try语句块的新函数;
寻找处理代码的过程与函数调用链刚好相反。当异常被抛出时,首先抛出该异常的函数。如果没有找到匹配的catch子句,终止该函数,并在调用该函数的函数中寻找。如果还是没有找到匹配的catch子句,这个新的函数也被终止,继续搜索调用它的函数。以此类推,沿着程序的执行路径逐层回退,直到找到适当类型的catch子句为止。
如果还是没有找到任何匹配的catch子句,程序转到名为 terminate
的标准库函数,一般情况下,执行该函数将导致程序非正常退出。
对于没有任何try语句块定义的异常,也按照类似的方式处理:没有try语句块也就没有匹配的catch子句。如果没有try语句块且发生了异常,系统就会调用terminate
函数并终止当前程序的执行
标准异常
exception
头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息
stdexcept
头文件定义了几种常见的异常类,见下表
new
头文件定义了bad_alloc异常类型,第12章详细介绍
type_info
头文件定义了bad_cast异常类型,第19章详细介绍