第五章 摘录

5.1 简单语句

;  //空语句

类似python中的pass。在循环中有时就会用到。

别漏写分号,也别多写。一般来说多余的空语句是无害的,但是如果在if或者while条件后跟了一个额外的分号就可能改变程序员的初中部。

复合语句也被称作块,指用花括号扩起来的(可能为空的)语句和声明的序列。一个块就是一个作用域。如while或for循环的循环体必须是一条语句,{ }就是把可能的多条语句转变成一条复合语句(块)。

块也可为空,指内部没有任何语句的一对花括号。其作用等价于空语句。

5.2 语句作用域

5.3 条件语句

悬垂else:c++规定else与它最近的尚未匹配的if匹配。

switch的case必须为整型常量表达式。并且case如果匹配成功,将从该标签开始往后顺序执行所有case分支,除非程序显式中断这一过程。

例子: 

switch (ch)

{

    case 'a': case 'e': case 'i': case 'o': case 'u':  //只要是aeiou中任意一个都会执行

                ++vowelCnt;

                break;

}

一般来说不要省略case分支最后的break语句。

即使不准备在default标签下做任何工作,定义一个default标签也是有用的。目的在于告诉读者我们已经考虑到了默认的情况。

对于switch内部的变量定义部分,很有趣。

参考:https://blog.csdn.net/neuwyt/article/details/48968039

https://www.zhihu.com/question/23051685

另外,变量的声明与定义不是语句!!!

重点是:

初始化操作和定义变量对于编译器来说是两回事,

初始化操作是一个确确实实在运行时才会被调用的语句,是可以被case跳转屏蔽掉的语句;而定义是在编译时期就完成检查的。

------------

疑惑点:

switch(index){ case 1: int ix = 2; break; default: int ix = 3; break; }

为何这个报错?上述代码不存在定义,每次执行必然进入不同的case,ix只可能被初始化一次,仍然报错 error: redefinition of 'ix'

5.4 迭代语句

5.5 跳转语句

goto语句作用是从goto语句无条件跳转到同一函数内的另一条语句。

不要在程序中使用goto语句,因为它使得程序既难理解又难修改。

5.6 try语句块和异常处理

异常处理机制为程序中异常检测异常处理这两部分的协作提供支持。

throw表达式,异常检测部分使用throw表达式来表达它遇到了无法处理的问题,我们说throw引发了异常。

try语句块,异常处理部分使用try语句块。以关键字try开始,并以一个或多个catch子句结束。因为catch子句处理异常,所以也被称作异常处理代码。

一套异常类,用于在throw和catch之间传递异常的具体信息。

编写异常安全的代码非常困难,异常中断了程序的正常流程。那些在异常发生期间正确执行了“清理”工作的程序被称作异常安全的代码。然而经验表明,编写异常安全的代码非常困难。对于一些程序来说,当异常发生时只是简单终止程序,此时则不需要怎么担心异常安全。在google style guide里指明了不使用异常。

标准异常库

https://www.cnblogs.com/ronny/p/3656559.html

你可能感兴趣的:(第五章 摘录)