CH5
1. 程序最小的独立单元是语句(statement);一个表达式给它加个分号就变成了一个简单语句(simple statement);复合语句(compound statement)是由一对花括号包围起来的一系列简单语句。
2. 程序语句最简单的形式是空语句,后面仅有一个分号。
3. 在逻辑上,程序经常需要执行两条或多条语句构成的序列,在这样的情况下用一个复合语句(compound)来代替单个语句。
4. 包含一条或多条声明语句的复合语句,被称为块(block)或语句块(statement block)。
5. 声明语句展示了声明的局部性(locality of declaration)——即声明语句出现在被定义对象首次被使用的局部域内。
6. 一条声明语句可以由一个或多个对象定义构成;在代码中倾向于根据对象的用法将其分组。
7. 一些声明规则:1)避免使用全局声明,并适当地使用namespace;2)把所有的声明置于块一开始的地方;3)当声明涉及许多修饰词时,每一个应占用独立的一行;4)为所有的变量设立初值。
8. C++语言提供if语句的动机是:根据指定的表达式是否为true,有条件地执行一条语句或语句块。condition(条件)必须被放在括号内,它可以是表达式,或是一条具有初始化功能的声明语句。
9. if-else语句引入了一种二义性问题,称为空悬else(dangling-else)问题。
10. C++提供了switch语句,作为一种在一组互斥的项目中做选择的替代方法。
11. switch语句由以下部分构成:1)关键字switch,后面是一个要被计算的表达式,表达式被放在括号中;2)一组case标签(label),它由关键字case后接一个常量表达式及其冒号构成;3)与一个或一组case标签相关联的语句序列;4)可选的default标签。
12. 关键字case后面的值必须是一种整数类型的常量表达式;任意两个case标签不能有同样的值,如果有,则导致编译错误。
13. switch表达式可以是任意复杂的表达式,包括函数调用的返回值;它的值与每个case标签相关联的值作比较,直到某个匹配成功或全部标签比较完毕;如果匹配到了某个标签,则程序从其后的语句继续执行;如果所有标签都不匹配,那么若有default标签的话,则从default后面的语句继续执行,否则程序从switch语句后面的第一条语句继续执行。
14. 程序员必须显式地告诉编译器停止执行switch中的语句,这可以通过在switch语句内的每个执行单元后指定一个break语句来完成;在大多数条件下,一个case标签的最后一条语句是break。
15. for和while循环首先进行条件的真值测试,这意味着这两个循环都可以在相关语句或语句块还没有被执行的情况下就终止了;第三种循环结构,do-while循环保证语句或语句块至少被执行一次——在这些语句被执行之后进行条件测试。
16. for循环最普遍的用法是遍历一个定长的数据结构,如数组或vector向量。
17. init-statement(初始化语句)可以是声明语句或表达式;一般地,它被用来对一个在循环过程中被递增的变量进行初始化,或者赋给一个起始值。
18. expression(表达式)在循环每次迭代后被计算,一般用它来修改在init-statement中被初始化的、在condition中被测试的变量;如果condition的第一次计算结果为false,则expression不会被计算。
19. for循环的计算顺序如下:1)在循环开始,执行一次init-statement;2)执行condition;3)执行expression。
20. do while循环保证至少执行一次statement。do while循环的条件(即condition)部分不支持对象定义。
21. break语句终止最近的while、do while、for或switch语句,程序的执行权被传递给紧接着被终止语句之后的语句。一般来说,break语句只能出现在循环或switch语句中。
22. continue语句导致最近的循环语句的当前迭代结束,执行权被传递给条件计算部分;不像break语句终止的是整个循环,continue语句只终止当前的迭代。continue语句只有出现在循环语句中才是合法的。
23. goto语句提供了函数内部的无条件分支,它从goto语句跳转到同一函数内部某个位置的一个标号语句。
24. 如果我们在错误点上不能继续处理,那么一般来说,抛出异常比终止程序更好一些;异常会把控制权传送到程序先前被执行的部分,而它们有可能能够解决这个问题。