大家好,我是梁唐。这是EasyC++系列的第26篇,我们来谈谈switch语句。想要追求更好阅读体验的同学可以点击文末“阅读原文”访问github仓库。在switch的日常开发中,我们经常会遇到用一个变量来表示状态的情况。比如close-activate-complete,当我们需要判断状态的时候,需要列出if-else语句。if(status=='closed'){//todo}elseif(status=='activated'){//todo}elseif(status=='done'){//todo}如果只有几个,当我们要枚举的状态比较多,写if-else会很麻烦。所以C++提供了一个switch语句来代替简单的if-else列表。switch(expression){caseconstant1://todocaseconstant2://todocaseconstant3://tododefault://todo}需要注意的是switch语句中的表达式只能是整数或者枚举类型,不能是其他类型。例如,字符串不能用作switch语句的case。这是很棘手的,一不小心很容易出错。所以上面的if-else语句可以改写为:switch(status){case1://todo1break;case2://todo2break;case3://todo3break;default://todo}最后一个default代表默认情况,即就是,当前面所有的可能性都不满足时,就会执行defalut标签下的内容。另外需要注意的是,switch语句有点像路牌。它只是根据表达式的值将代码跳转到相应的位置,而不是只运行标签对应的代码。比如我们的status为1时,代码会跳转到todo1,todo1执行完后,todo2和todo3的代码会继续执行。如果我们只想执行todo1的代码,需要在末尾加上break表示执行结束跳出。这也是一个陷阱。添加或不添加中断有两种效果。数字1、2、3表示状态明显会导致不太明显的意思,所以我们也可以使用枚举类型:enumstatus{closed,done,activated};statusst;switch(st){casclosed://todobreak;casedone://todobreak;caseactivated://tododefault://todo}
