C++ Primer 第五章 语句
简单语句
大多数语句以分号结束,表达式语句的作用是执行表达式并丢掉求值结果。单独一个分号构成一个空语句,因此不要随便多写一个分号。
复合语句,即块语句,是指用花括号括起来的语句,块引入一个作用域范围,块语句不以分号结束。空块的作用等价于空语句。
语句作用域
在控制结构中定义的变量紧在该控制结构语句中有效。
条件语句
在嵌套的if-else语句中,else语句与最近的那个if语句匹配。可以通过使用花括号来改变这种默认的匹配规则。
switch语句提供在若干选项中作出选择的功能,首先执行switch语句后面的表达式,求值后转换为整形与case语句比较,如果匹配某个case标签,执行该标签后的第一条语句,直到遇见break语句或到达switch语句结尾。case标签必须是整形常量表达式。任意两个case标签的值不能相同,否则引发错误。最好在最后一个标签后写上break语句。当所有的case语句都不能匹配时,执行default语句,default语句后面最好也添加break语句。
特别注意,如果在case标签内定义变量,最好不要让变量跨越case标签,因此需要把变量定义在块内。
迭代语句
while语句中如果第一次条件语句求值为false,则循环体一次都不会执行。通常来说在条件表达式中或循环体中改变条件表达式的求值结果,否则循环可能无法终止。定义在while条件部分或循环体内的变量每次循环都经历创建与销毁的过程。
for语句中的初始化语句只执行一次,如果第一次执行条件语句时为false,则循环体不会执行并直接跳出for语句。执行完循环体后执行表达式语句,然后继续执行条件语句。当省略条件语句时表示条件一直为true。
C++ 11标准引入了一种更简单的for语句,范围for语句能遍历容器或其他序列中的元素。每次迭代都会重新定义声明变量并初始化为序列中的下一值。如果想通过迭代变量改变元素的值,需要声明为引用类型。最好使用auto语句声明迭代变量。在范围for语句中不能增减容器或序列的元素个数。
do-while语句不允许在条件中定义变量,在条件语句的括号后面要添加分号。循环语句会至少执行一次。
跳转语句
break语句负责终止while ,do while,for,switch语句,只能终止当前所在的语句。
continue语句出现在for,while,do while循环内部,终止当前循环并执行下一个循环,对于while,do while,继续判断条件语句,对于范围for,继续迭代下一个元素,对于for语句,执行语句头的expression。
goto语句只能从同一函数内跳转,goto语句直接跳转到带标签的语句,标签标识符独立于其他的变量命名空间。
try语句块和异常处理
throw表达式用于抛出异常,或表示程序引发了一个异常。
try-catch语句用于捕获并处理异常。一个try语句可以包括多个catch语句,注意C++不支持finally语句。
标准库提供了一组异常类,其中exception,bad_alloc,bad_cast只能以默认初始化的方式初始化,其他类型必须要提供异常信息。