一、简单语句
表达式语句的作用就是执行表达式并丢弃掉求值结果
使用空语句的时候,应该加上注释,从而令读这段代码的人知道该语句是有意省略的
if和while默认控制一条语句
复合语句块
二、语句作用域
三、条件语句
一个if……else语句(即使含有else if)算作一条语句
建议使用花括号,这样更加明确,不容易出错
C++规定,else与离它最近的尚未匹配的if匹配,从而消除了程序的二义性
switch语句提供了一条便利的途径使得我们能够在若干固定选项中作出选择,注意格式
程序从匹配的标签之后的第一条语句开始执行,直到到达了switch的结尾或者是遇到一条break语句为止
case关键字和它对应的值一起被称为case标签。case标签必须是整型常量表达式
按照标准的写法书写switch语句
?????????case标签必须是整型常量表达式??????????
四、迭代语句
定义在while条件部分或者while循环体内的变量每次迭代都会经历从创建到销毁的过程
for循环头部的第一段语句可以定义多个对象,但是只能有一个声明语句,因此所有变量的基础类型必须相同
范围for语句可以用来遍历初始值列表、数组、vector或string对象。范围for循环不能向序列中加入元素
do……while循环,分号不要忘了。
五、跳转语句
break语句负责终止离它最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始继续执行
continue语句终止最近的循环中的当前迭代并立即开始下一次迭代,continue语句只能出现在for、while和do while循环的内部。
continue对于while和do while语句来说,继续判断条件的值;对于传统的for循环来说,继续执行for语句头部的迭代语句(递增或递减);对于范围for语句来说,则是用序列中的下一个元素初始化循环控制变量
范围for语句中的循环控制变量
goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句(用标示符进行了标记)。强烈建议不要在程序中使用goto语句,它会使得程序变得恶心
*同一函数内的另一条语句
带标签语句是一种特殊的语句,在它之前由一个标示符以及一个冒号
标签标示符独立于变量或其他标示符的名字(建议不要用相同的名字),
六、try语句块和异常处理
异常处理机制包括异常检测和异常处理两个部分
异常检测部分用throw表达式来表示它遇到了无法处理的问题。我们说throw引发了异常
异常处理部分使用try语句块处理异常,try语句块以关键字try开始,并以一个或多个catch子句结束。catch子句会捕获throw语句抛出的异常并进行相关处理
一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体的信息
**异常类只是用来传递异常信息的
抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码
catch后的括号内有异常声明。在选中了某个catch子句处理异常之后,执行与之对应的块。catch一旦完成,程序跳转到try语句块最后一个catch子句之后的那条语句继续执行
try语句块中声明的变量在块外无法访问,特别是在catch子句内也无法访问
逐层向上寻找合适的异常处理代码(合适的catch子句),如果没有找到合适的处理代码,程序会转到名为terminate的标准库函数,该函数将导致程序非正常退出
那些在异常发生期间正确执行了“清理”工作的程序被称为异常安全的代码
exception头文件中定义了最通用的异常类exception。只报告异常的发生,不提供任何额外信息
stdexcept头文件定义了几种常见的异常类
new头文件定义了bad_alloc异常类
type_info头文件定义了bad_cast异常类
标准库异常类只定义了几种运算,包括创建和拷贝异常类对象,以及为异常类对象赋值
我们只能默认初始化exception、bad_alloc、bad_cast对象,不允许为这些对象提供初始值
其他异常类必须提供初始值,其中包含错误信息。不允许使用默认初始化
异常类型只定义了一个what函数成员,用来返回一个C风格字符串的const char *(前面有的说的是string对象的副本??????)
what函数成员返回什么信息与是否能够显式初始化该异常对象有关