关于语句的注意事项

1、表达式语句的作用是执行表达式并丢弃掉求值结果。

2、使用空语句时,应该加上注释,从而令这段代码的读者知道该语句故意省略。

3、多余的空语句,并非总是无害的,比如说在循环语句的条件后面加上分号,表示循环空语句,真正的循环体是空语句。

4、复合语句,也称为块,就是用花括号括起来的一个作用域,在块中引入的名字只能在块中以及其嵌套在块中的子块访问。一般用在函数、循环语句中,为了执行多条语句,将这些语句复合形成一条复合语句。

5、空块等价于空语句。

6、由于在控制结构定义的变量要马上使用,所以必须初始化,所谓控制结构就是if、for、while、switch的结构内。

7、if语句的condition必须是能够转换成bool类型的表达式或者变量(已初始化的)。

8、当if分支的数量多于else分支,那么,就会出现悬垂else。

9、switch语句括号里的是表达式,会对其进行求值,然后与case标签里的值进行匹配,若成功,则执行到switch语句结束,或者遇到break跳出switch语句break语句其作用是中断当前控制流

10、case标签必须是整型常量表达式,一般case后面都要加个break的,若程序需要,不想加break语句,则建议加一段注释,说明程序的逻辑

11、标签后面必须跟上一条语句或者另一个标签。若想以一个空的标签结束的话,应该在标签后面加上一个空语句或空块。

12、若在某处一个带有初值的变量位于作用域之外,在另一处,该变量位于作用域之内,则从前一处跳转到后一处是非法的行为。也就是说,如果switch跨过的标签的作用域里,有一个对一个变量初始化的操作,那么跨过之后,执行下一个标签时,里面作用域使用到了前面初始化的变量,由于switch忽略了前面的初始化操作,所以该行为是非法的。C++语言规定,不允许跨过初始化变量语句,直接跳转到该变量作用域内的另一个位置。

13、若需要给一个分支定义并初始化一个变量,应该将其定义在块内,这样其他分支就没有办法去访问这个变量。

14、C++语言规定,case标签后面只能跟一个值

15、for语句,如果第一次判断cond为假,那么循环体中一次也不会执行。语句头中定义的变量,只在该for语句循环体内可见。

16、for语句的init-statement可以声明定义多个对象,但是只能只有一条声明语句,也就是说,声明的多个对象的类型必须相同。

17、for语句如果省略了condition,表示条件一直为真,一般要在循环体中书写终止循环的代码。如果省略了expression,那么需要在条件部分或者循环体部分实现迭代的功能。

18、范围for语句的expression中的类型,是拥有能够返回迭代器的begin和end成员,并且不能使用范围for语句添加容器的元素,由于在范围for语句头已经预存了end()的值,如果添加容器元素,之前预存的值就会无效化。

19、do while语句应该在while条件后加个分号,并且不允许在do while条件部分定义变量。

20、break跳转语句,可以跳出或终止离它最近的while、for、do while或者switch语句。

21、continue语句,终止最近的循环中的当前迭代,并立即开始下次迭代。但是它不作用于switch语句,除非switch语句嵌套在迭代语句中。

22、goto语句,无条件跳转到同一函数内的另一条语句。《C++ primer fifth》建议我们不要在程序中使用该语句,会使得程序很难理解,而且很难修改。与switch语句类似,不能将程序的控制权从变量作用域之外转移到作用域之内。

23、goto语句后面的标签,独立于变量或其他的标识符的名字。所以使用时,不会因为使用同一个名字而受到干扰。

24、异常是指运行时出现的反常行为,这些行为超过了函数的正常功能范围。

25、异常检测是指检测到异常,然后发送信号,异常的检测就完成了,不需要知道信号发到哪里,即不需要知道故障何时何地得到解决,异常检测使用了throw表达式,当遇到一个无法处理的问题,throw就会引发一个异常。

26、异常处理,使用try语句块,一般以关键字try开始,以多个catch子句结束,而catch(捕捉)负责处理异常的。也称异常处理代码。

27、throw抛出异常,catch子句捕捉异常,之间有一套异常类负责传递异常的具体信息。

28、throw后面的表达式类型就是抛出异常的类型。标准库异常类型的对象,必须使用一个string对象或者C风格字符串对其进行初始化。标准库异常类型的对象都有一个what()成员函数,其返回前面初始化对象时所使用的string对象的副本。并且其类型是常量字符指针类型。

29、try语句块中关键词try后是一个语句块,该块外部不能访问,其组成正常的程序逻辑;多个catch子句在其关键字后的括号是一个对象的声明(异常对象)。注意:catch子句也不能访问try后面的语句块。

30、寻找处理代码的过程与函数调用的路径刚好相反,如果一个函数抛出异常,然后在该函数中没有找到匹配的catch子句,那么会回退到调用该函数的函数,继续寻找,若没找到,则再回退,直到找到为止,如果最终还是没有找到,那么就会转到名叫terminate的标准函数中,该函数的行为与系统有关,一般情况下执行该函数将使程序非正常退出。

31、在异常发生期间正确执行了“清理”工作的程序被称作异常安全的代码。

32、对于exception、bad_alloc和bad_cast异常对象,不允许给这些对象提供初始值,只能执行默认初始化。其他类型则相反。what函数的返回值根据异常对象决定,若是前者则是返回由编译器决定的值,若是后者则是返回提供的字符串。

原文地址:https://www.cnblogs.com/Dark-King/p/9455753.html