第五章 语句
一、简单语句
- 表达式语句:一个表达式末尾加上分号,就变成了表达式语句。
- 空语句:只有一个单独的分号,记得注释说明提高代码可读性。
- 复合语句(块):用花括号 {}包裹起来的语句和声明的序列。一个块就是一个作用域。一个块结束不需要添加分号。
二、语句作用域
三、条件语句
- 悬垂else(dangling else):用来描述在嵌套的if else语句中,如果if比else多时如何处理的问题。C++使用的方法是else匹配最近没有配对的if。
- 一般不要省略case分支最后的break语句。如果没写break语句,最好添加一段注释说清楚程序的逻辑。
- 及时不准备再default标签下做任何事情,定义一个default标签也是有用的。其目的在于告诉程序的读者,已经考虑到了默认的情况,只是目前什么也没做。
四、迭代语句
- while:当不确定到底要迭代多少次时,使用 while循环比较合适,比如读取输入的内容。
- 平常for: for语句可以省略掉 init-statement, condition和 expression的任何一个;甚至全部。
- 牢记for语句头中定义的对象只在for循环体内可见。
- 范围for: for (declaration: expression) statement。它可作用于能返回迭代器的begin和end成员的类型。
五、跳转语句
- C++提供了四种跳转语句:break、continue、goto和return。
- break:break语句负责终止离它最近的while、do while、for或者switch语句,并从这些语句之后的第一条语句开始继续执行。
- continue:终止最近的循环中的当前迭代并立即开始下一次迭代。只能在while、do while、for循环的内部。
- goto:它很不符合现代编程的理念,慎用。
- return:终止函数的执行。
六、try语句块和异常处理
- throw表达式:异常检测部分使用 throw表达式来表示它遇到了无法处理的问题。我们说 throw引发 raise了异常。
- try语句块:以 try关键词开始,以一个或多个 catch字句结束。 try语句块中的代码抛出的异常通常会被某个 catch捕获并处理。 catch子句也被称为异常处理代码。
- 异常类:用于在 throw表达式和相关的 catch子句之间传递异常的具体信息。
-
异常安全:异常中断了程序的正常流程。异常发生时,调用者请求的一部分计算已经完成了,另一部分则尚未完成。
通常情况下,略过部分程序意味着某些对象处理到一半就戛然而止,从而导致对象处于无效或者未完成的状态,或者资源没有正常释放等等。
那些在异常发生期间正确执行了"清理"工作的程序被称作异常安全的代码。通俗的讲,就是当抛出异常后,程序能执行正确的行为。