空语句
空语句中只含有一个单独的分号:
;
如果程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。
空块,所谓空块就是一堆好括号内没有任何语句。
范围for语句
C++ 11引入的范围 for
语句的语法形式为:
for (declaration : expression)
statement
-
expression
必须是一个序列,比如用花括号括起来的初始值列表、数组、vector
、string
等类型,这些类型的共同点是拥有返回迭代器的begin
和end
成员。 -
declaration
定义一个变量,序列中的每个元素都得能转换成该变量的类型,确保类型相容最简单的方法是使用auto
。 -
如果要对序列中的元素执行写操作,循环变量必须声明成引用类型。
-
每次迭代都会重新定义循环变量,并将其初始化为序列中的下一个值。
do while 语句
do while
语句至少执行一次循环。
do
statement
while(condition);
跳转语句
break语句
break
语句负责终止离它最近的 while、do while、for、switch
语句,并从这些语句之后的第一条语句开始继续执行。
break
语句的作用范围 仅限于最近的循环或者 switch
。
continue 语句
continue
语句终止最近的循环当中的当前迭代并立即开始下一次迭代。continue
只能出现在 for、while、do while
循环内部。
goto 语句
goto
语句的作用是从 goto
语句无条件跳转到同一函数内的另一条语句。
goto label;
label
是用用于一条语句的标识符,带标签的语句是一种特殊的语句,在他之前有一个标识符以及一个冒号:
end:
return;
标签提示符独立于变量或其他提示符的名字,因此,标签提示符可以和程序中其他实体的标识符使用同一个名字而不会相互干扰。
goto
语句和控制转向的那条带标签的语句必须位于同一个函数体之内。
try 语句块和异常处理
异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。典型的异常包含失去数据库连接以及遇到意外的输入等。
当程序的某部分检测到一个无法处理的问题时,需要用到异常处理。此时,检测出问题的部分应该发出某个信号以表明程序遇到了故障,无法继续下去,而且信号的发出方无须知道故障将在何处得以解决,一旦发出异常信号,检测出问题的部分就完成了任务。
C++ 中异常处理包含:
throw
表达式,异常检测部分使用throw
表达式来表示它遇到了无法处理的问题。称为throw
引发了异常。try
语句块,异常处理部分使用try
语句块处理异常。try
语句块以关键字try
开始,并以一个或多个catch
子句结束。try
语句块中代码抛出的异常通常会被某个catch
子句处理。因为catch
子句处理异常,所以它们也被称为异常处理代码。
throw 表达式
程序的异常检测部分使用 throw
表达式引发一个异常。throw
表达式包含关键字,throw
和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。
if(item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");
try 语句块
try语句块的通用语法形式为:
try{
program-statements
}
catch(exception-declaration)
{
handler-statements
}
catch(exception-declaration)
{
handler-statements
}
catch
子句包含三个部分:关键字catch
;括号内一个(可能未命名的)对象的声明,称为异常声明;语句块。try
语句块内声明的变量在块外部无法访问,特别是在catch
子句内无法访问。
函数在寻找处理代码的过程中退出
在复杂系统中,程序在遇到抛出异常的代码前,其执行路径可能已经经过了多个 try
语句块。
寻找处理代码的过程与函数调用链刚好相反。当异常被抛出时,首先搜索抛出该异常的函数,如果没有找到匹配的catch
子句,终止该函数,并在调用该函数的函数中继续寻找,如果还没有找到匹配的 catch
子句,这个新的函数也被终止,继续在调用它的函数中搜索,以此类推,沿着程序的执行路径逐层回退,直到找到适当类型的catch
子句为止。如果最终没有找到匹配的 catch
子句,程序转到名为 terminate
的标准库函数,该函数的行为与系统有关,一般情况下,执行该函数将导致程序正常退出。
标准异常
C++ 标准库定义了一组类,用于报告标准库函数遇到的问题,它们分别定义在4个头文件中:
-
exception
头文件定义了最通用的异常类exception
。它只报告异常的发生,不提供任何额外的信息。 -
stdexcept
头文件定义了几种常用的异常类:
-
new
头文件定义了bad_alloc
异常类型。 -
type_info
头文件定义了bad_cast
异常类型。