C++ Primer第五章语句
简单语句
C++语言中大多数语句以分好结束。
表达式语句一个表达式末尾加上分好就变成了表达式语句
空语句只有一个单独的分号
复合语句是指用花括号括起来的语句和声明序列,复合语句也被称作块.一个块就是一个作用域。
语句作用域
在if,switch,while,for语句的控制结构内定义变量。定义在控制结构当中的变量只在相应语句的内部可见。
while (int i = get_num())
cout << i << endl;
条件语句
if和switch
if语句是判断一个指定的条件是否为真,根据判断结果决定是否执行另外一条语句。
if (condition)
statement
else
statement2
switch语句首先对括号里的表达式求值,该变大事紧跟在关键字switch的后面《可以是一个初始化的变量声明。表达式的值转换成整数类型然后与每个case标签的值比较。
如果表达式和某个case标签的值匹配成功,程序从该标签之后的第一条语句开始执行,直到到达了switch的结尾或者遇到一条break语句为止。
一般不要省略case分支最后的break语句。如果没写break语句最好加一段注释说清楚程序的逻辑。
漏写break容易引发缺陷
迭代语句
它重复执行操作直到满足某个条件才停下来。while和for语句在执行循环体之前检查条件,do while语句先执行循环体然后检查条件
while (condition)
statement
当不确定要迭代多少次时使用while循环比较合适
for (init-statement;condition;exprssion)
statement
init-statemen必须是生命语句或者表达式语句或者空语句。
范围for语句
for (declaration:expression)
statement
expression表示的必须是一个序列,比如用花括号括起来的初始值列表,数组,vector,string等类型的对象。
do while语句
先执行循环体后检查条件。
do
statement
while (condition);
跳转语句
中断当前的执行过程。C++语言提供了4中跳转语句:break,continue,goto,return.
break语句
负责终止离它最近的while,do while,for或switch并从这些语句之后的第一条语句开始继续执行。
continue语句
终止最近的循环中当前迭代并立即开始下一次迭代。continue只能出现在for,while,do while的内部。
goto语句
作用是从goto语句无条件跳转到同一函数内的另一条语句。
不要在程序中使用goto语句因为它使得程序既难理解又难修改
goto label;
try语句块和异常处理
异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。
异常处理机制为程序中异常检测和异常处理这两部分提供了协作支持
throw表达式,异常检测部分使用throw表达式来表示它鱼蛋了无法处理的问题。
try语句块,异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句结束。
一套异常类用于在throw表达式和相关的catch子句之间传递异常的具体信息。
if (item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");
runtime_error是标准库异常类型的一种定义在stdexcept中。
try语句块
try {
program-statement
}
catch (excepition-declaration)
{
handler-statements
}
catch (exception-declaration)
{
handler-statement
}
标准异常
C++标准库定义了一组类,用于报告标准库函数遇到的问题,这些异常类也可以在用户编写的程序中使用
exception头文件定义了最通用的异常类exception。它只报告异常的发生。不提供任何额外信息。
stdexcept头文件定义了几种常用的异常类
new头文件定义了bad_alloc异常类型。
type_info头文件定义了bad_cast异常类型。
exception最常见的问题
runtime_error只有在运行时才能检测出的问题
range_error生成的结果超出了有意义的值域范围
overflow_error计算上溢
underflow_error计算下溢
logic_error程序逻辑错误
domain_error参数对应的结果值不存在
invalid_argument无效参数
length_error试图创建一个超出类型最大长度的对象
out_of_range使用一个超出有效范围的值
异常类提供一个what函数返回C风格字符串的内容。