C++ 语句
switch语句
如果表达式和某个case标签成功匹配,则从该标签后的第一条语句开始执行,直到到达了switch语句的结尾或者遇到一条break语句为止。

因为我们没有在case语句后加上break,所以他在匹配'a'之后将直接执行b++。

case关键字和它对应的值一起被称为case标签,且case标签必须为整型常量表达式。(上述例子中字符将会转换为ascii码,从而也被视为整型常量表达式)

switch内部的变量定义
如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支。这样一来程序可能会跨过某些标签,如果程序跳到了某个特定case,那么之前忽略的代码中含有变量的定义怎么办?
答案是如果在某处一个带有初值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳到后一处是非法行为。
try语句块和异常处理
异常是指运行时的反常行为,这些行为超出了函数正常功能的范围,典型的一场包括失去数据库连接以及遇到意外输入等。
异常处理机制为程序中异常检测和异常处理的协作提供支持。
异常处理包括:
throw表达式,异常检测部分使用throw来表示他遇到了无法处理的问题,我们说throw引发了一场。
try语句块,异常处理部分使用try语句块处理异常,try语句块以关键字try开始,并以一个或者多个catch语句结束,try语句块中代码抛出的异常通常会被某个catch子句处理,因为catch子句“处理”异常,所以他们也被叫做异常处理代码
一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息。
throw表达式

抛出异常的类型是runtime_error类型,定义在stdexcept头文件下,我们必须初始化runtime_error对象,方式为提供一个字符串或者string对象。
try语句块
try语句块的语法形式是

catch子句包括三个部分,catch关键字,括号内一个对象的声明(即exception-declaration),以及一个块。
注意:try语句块内的变量在块外无法访问,即使是catch子句。
处理代码

结果

try语句如果抛出了runtime_error的异常,那么就执行catch块内的语句。
err.what()是err的类型是runtime_error,what是runtime_error的一个成员函数,返回值是C风格字符串。
注意:编写异常安全的代码非常困难!
标准异常
C++标准库定义了一组类,用于报告标准库函数遇到的问题,他们分别定义在四个头文件中。
exception:定义了通用异常类exception,他只报告异常的发生,不提供任何信息。
stdexcept:定义了几种常用的异常类。
new:定义了bad_alloc异常类型,这种类型我们以后会介绍。
type_info:定义了bad_cast异常类型,同样我们以后会讲到。

我们只能以默认初始化的方式初始化exception,bad_alloc,bad_cast对象,不允许为这些对象提供初始值。
其他类型恰好相反,应该使用string对象或者字符串初始化这些对象,不允许默认初始化,创建此类对象时,必须初始化。