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里指明了不使用异常。
标准异常库<stdexcept>。
https://www.cnblogs.com/ronny/p/3656559.html
网友评论