在讲解switch语句之前,我们先来看一个不那么理想的使用if语句的示例:
动手写4.2.7
动手写4.2.7中展示了使用多个else if打印中文数字,这样的写法有些烦琐,也容易出错。对于不同区间的判断,我们可以自然而然地使用多个if...else语句来实现,但是对于类似枚举值的多个相等判断条件来说,C++提供了一种更适合的语法,也就是switch语句。
动手写4.2.8
动手写4.2.8展示了switch语句的基本语法,运行结果与动手写4.2.7的运行结果完全相同。
switch语句开头的括号中是一个表达式,而其下面的每个case都是这个表达式可能得到的值,每一个不同的值都会使程序走进一段不同的代码。表达式的值如果没有出现在所有case后面,就会自动落到default(默认)的代码段中。
提示
case后面必须是常量整型(包括字符型和布尔型),如果不是常量整数,编译器在编译的时候就无法确定分支的条件,那也就失去了使用switch语句优化的好处(编译器会对switch生成一种跳转表的优化结构)。如果case后面是常量的浮点型也没有什么意义,因为浮点数相等于一个特定值的概率是非常低的,不管它的范围有多小。
需注意的是,动手写4.2.8中的break也很关键,它会让程序跳出整个switch语句块。如果没有break,一个case的代码执行完后会继续执行紧接在case后的代码,这也叫作贯穿(Fall-through)。
动手写4.2.9
(www.xing528.com)
动手写4.2.9展示了一种贯穿的情况,运行结果如图4.2.6所示:
图4.2.6 由于贯穿,程序多打了一个数字
从输出结果中我们可以看到,这种情况与期望的不一致,代码行为与预期出现了偏差。
动手写4.2.10
动手写4.2.10展示了如何有意利用贯穿的特性使程序变得更加灵活,以此来实现对一个数的奇偶的判断。运行结果如图4.2.7所示:
图4.2.7 switch贯穿的合理应用
此外,default的添加也是值得注意的,因为如果没有把所有可能出现的case都处理好的话,程序可能也会出现预期之外的行为。
动手写4.2.11
动手写4.2.11中缺少了default,这样会导致程序在num为12的情况下什么都不会打印,用户将会感到非常困惑。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。