首页 理论教育 C++switch语句详解

C++switch语句详解

时间:2023-08-20 理论教育 版权反馈
【摘要】:动手写4.2.8动手写4.2.8展示了switch语句的基本语法,运行结果与动手写4.2.7的运行结果完全相同。需注意的是,动手写4.2.8中的break也很关键,它会让程序跳出整个switch语句块。运行结果如图4.2.7所示:图4.2.7switch贯穿的合理应用此外,default的添加也是值得注意的,因为如果没有把所有可能出现的case都处理好的话,程序可能也会出现预期之外的行为。

C++switch语句详解

在讲解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的情况下什么都不会打印,用户将会感到非常困惑。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈