语句
除了顺序执行以外,C++语言提供了一组控制流语句以支持更复杂的执行路径。
[TOC]
5.1 简单语句
C++大多数语句都以分号结束。在末尾加上分号,就变成了表达式语句。
空语句:只含有一个单独的分号。
复合语句(块):用花括号括起来的语句和声明的序列,一个块就是一个作用域,在块中引入的名字只能在块内部及嵌套的子块内访问。
5.2 语句作用域
在if、switch、while和for语句的控制结构内定义的变量只能在相应语句的内部可见。
5.3 条件语句
C++中提供了两种按条件执行的语句,一种是if语句,一种是switch语句。
1.if语句
if语句的作用是:判断一个指定的条件是否为真,并根据判断结果决定是否执行另外一条语句。
if (condition){
statement;
}
if (condition){
statement;
}
else{
statement;
}
2.switch语句
switch语句可以在若干固定选项中做出选择。switch首先对括号内的表达式求值,将其转换成整数类型,然后与每个case标签的值进行比较,选择。
如果表达式和某个case标签的值匹配成功,程序从该标签之后的第一个语句开始执行,直到到达了switch的结尾或遇到一条break语句。
default标签是在case标签之后,即不满足各case标签的可以跳转到default标签开始执行。
switch (statement){
case condition1:
case condition2:
.
.
.
case conditionn:
default:
}
5.4 迭代语句
迭代语句通常称为循环,重复执行操作直到满足某个条件才停下。
1.while语句
while语句只要条件为真,就会重复执行循环体
while (condition){
statement
}
2.传统for语句
for语句的语法形式为:
for (init-statement;condition;expression)
statement
其中关键字for及括号里的部分称作for语句头,其中init-statement必须为声明语句、表达式语句或空语句三者之一。
虽然init-statement可以定义多个对象,但是init-statement只能有一条声明语句,所以所有变量的基础类型必须相同。
3.范围for语句
在C++11新标准中引入了一种更简单的for语句,用于遍历容器或其他序列所有元素。其语法形式为:
for(declaration:expression)
statement
其中expression必须是一个序列,比如初始值列表、数字、vector、string等类型对象,其共同特点是拥有能返回迭代器的begin和end成员函数。
declaration定义了一个变量,序列中每个元素都得能转换成该变量的类型。 最简单的方法就是使用auto类型说明符。如果需要对序列中的元素执行写操作,循环变量必须声明为引用类型。
4.do while语句
do while语句先执行循环体后检测条件,其语法形式如下:
do
statement
while (condition);
5.5 跳转语句
跳转语句将中断当前的执行过程,C++语言中有4种跳转语句:break、continue、goto和return。
1.break语句
break语句只能出现在迭代语句或switch语句内部,负责终止离他最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始继续执行。
2.continue语句
continue语句只能出现在迭代语句中,终止最近的循环中的当前迭代并立即开始下一次迭代。
3.goto语句
goto语句可以无条件跳转到同一函数内的另一条语句。
goto label;
...
label: statement;
5.6 try语句块和异常处理
异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。
当程序的某部分检测到一个它无法处理的问题时,需要用到异常处理。此时,检测出问题的部分应该发出某种信号表明程序遇到了故障。
异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言 中,异常处理包括:
- throw表达式,异常检测部分用throw表达式来表示它遇到了无法处理的问题。
- try语句块,异常处理部分使用其处理异常。try语句块以关键词try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理,也被称为异常处理代码。
- 一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息。
1 throw表达式
throw表达式包含关键字throw和紧随其后的一个表达式,表达式的类型就是抛出的异常类型。
if(item1.isbn()!=item2.isbn())
throw runtime_error("Data must refer to same ISBN");
在代码中,如果ISBN不一样就抛出一个异常,该异常时类型runtime_error的对象,抛出异常时终止当前的函数,并把控制权转移给能处理该异常的代码。
2 try语句块
try语句块的通用语法形式时:
try{
program-statements
}catch(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements
}
try语句块的一开始时关键字try,随后紧跟着一个块。而后就是一个或多个catch子句,每个catch子句包括三个部分:关键字catch、括号内一个对象的声明(称作异常声明)、一个块。当选中某个catch子句处理完异常后,跳转到try语句块最后一个catch子句之后的那条语句开始执行。
3 标准异常
C++标准库定义了一组类,用于报告标准库函数遇到的问题,这些异常类也可以用在用户编写的程序中。