【C++】《C++ Primer 5th》笔记-Chapter5-语句

笔记:
一、简单语句
1、最简单的语句是空语句,空语句只含有一个单独的分号。
一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。
使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的。
空块的作用等价于空语句。

二、语句作用域

三、条件语句
1、switch语句首先对括号里的表达式求值,该表达式紧跟在关键字switch的后面,可以是一个初始化的变量声明。表达式的值转换成整数类型,然后与每个case标签的值比较。
break语句的作用是中断当前的控制流。
case关键字和它对应的值一起被称为case标签。case标签必须是整型常量表达式。
任何两个case标签的值不能相同,否则就会引发错误。另外,default也是一种特殊的case标签。

2、一般不要省略case分支最后的break语句。如果没写break语句,最好加一段注释说清楚程序的逻辑。

四、迭代语句
1、定义在while条件部分或者while循环体内的变量每次迭代都经历从创建到销毁的过程。
2、当不确定到底要迭代多少次时,使用while循环比较合适。
3、for语句头能省略掉init-statement、condition和expression中的任何一个(或者全部)。
省略condition的效果等价于在条件部分写了一个true。
4、C++11新标准引入了一种更简单的for语句,这种语句可以遍历容器或其他序列的所有元素。范围for语句的语法形式是:
for(declaration : expression)
    statement
expression表示的必须是一个序列,比如用花括号括起来的初始值列表、数组或者vector或string等类型的对象,这些类型的共同特点是拥有能返回迭代器的begin和end成员。
确保类型相容最简单的办法是使用auto类型说明符,这个关键字可以令编译器帮助我们指定合适的类型。
注意:如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型。例如for(auto &r : vec)。

5、为什么之前强调不能通过for范围语句增加vector对象(或者其他容器)的元素?因为在范围for语句中,预存了end()的值。一旦在序列中添加(删除)元素,end函数的值就可能变得无效了。

6、do while语句应该在括号包围起来的条件后面用一个分号表示语句结束。

五、跳转语句
1、跳转语句中断当前的执行过程。C++语言提供了4种跳转语句:break、continue、goto和return。
2、break语句负责终止离它最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始继续执行。
3、continue语句终止最近的循环中的当前迭代并立即开始下一次迭代。continue语句只能出现在for、while和do while循环的内部,或者嵌套在此类循环里的语句或块的内部。和break语句类似的是,出现在嵌套循环中的continue语句也仅作用于离它最近的循环。和break语句不同的是,只有当switch语句嵌套在迭代语句内部时,才能在switch里使用continue。
4、goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。
注意:不要在程序中使用goto语句,因为它使得程序既难理解又难修改。
带标签语句是一种特殊的语句,在它之前有一个标示符以及一个冒号。
goto语句和控制权转向的那条带标签的语句必须位于同一个函数之内。

六、try语句块和异常处理
1、异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言中,异常处理包括:
①throw表达式,异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发了异常。
②try语句块,异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为catch子句"处理"异常,所以它们也被称为异常处理代码。
③一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息。

2、程序的异常检测部分使用throw表达式引发一个异常。

3、每个标准库异常类都定义了名为what的成员函数,这些函数没有参数,返回值是C风格字符串(即const char*)。该字符串的目的是提供关于异常的一些文本信息。what函数返回的C风格字符串的内容与异常对象的类型有关。如果异常类型有一个字符串初始值,则what返回该字符串。对于其他无初始值的异常类型来说,what返回的内容由编译器决定。

4、如果最终没能找到任何匹配的catch子句,程序转到名为terminate的标准库函数。该函数的行为与系统有关,一般情况下,执行该函数将导致程序非正常退出。
对于那些没有任何try语句块定义的异常,也按照类似的方式处理:毕竟,没有try语句块也就意味着没有匹配的catch子句。如果一段程序没有try语句块且发生了异常,系统会调用terminate函数并终止当前程序的执行。

5、C++标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类也可以在用户编写的程序中使用,它们分别定义在4个头文件中:
①exception头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外的信息。
②stdexcept头文件定义了几种常用的异常类。
③new头文件定义了bad_alloc异常类型。
④type_info头文件定义了bad_cast异常类型。
我们只能以默认初始化的方式初始化exception、bad_alloc和bad_cast对象,不允许为这些对象提供初始值。其他异常类型的行为则恰好相反:应该使用string对象或者C风格字符串初始化这些类型的对象,但是不允许使用默认初始化的方式。当创建此类对象时,必须提供初始值,该初始值含有错误相关的信息。

一些术语:
1、异常安全:是一个术语,表示的含义是当抛出异常后,程序能执行正确的行为。
2、带标签语句:前面带有标签的语句。所谓标签是指一个标识符以及紧跟着的一个冒号。对于同一个标识符来说,用作标签的同时还能用于其他目的,互不干扰。
3、terminate是一个标准库函数,当异常没有被捕捉到时调用。terminate终止当前程序的执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值