《C++ primer》ch6 switch语句

      1. switch语句的执行

误解:程序只会执行匹配的case标号相关联的语句。
正解:程序会从匹配的case标号为起点开始执行,并跨越其后的case边界继续执行其他语句,直到switch结束或遇到break语句为止。
  所以当case标号后缺少break时就会发生错误,见下例:

<span style="font-size:14px;"><span style="white-space:pre">	</span>char ch;
<span style="white-space:pre">	</span>int a = 0, b = 0, c = 0;
	while(cin>>ch)
	{
		switch(ch)
		{
		case 'a':
			++a;
		case 'b':
			++b;
		case 'c':
			++c;
		}
	}
	cout<<a<<endl;
	cout<<b<<endl;
	cout<<c<<endl;</span>
如果输入的ch为a,则++a,++b,++c都会执行。

2. switch内部的变量定义

      对于switch结构,只能在它的最后一个case标号或default标号后面定义变量,制定这个规则是为了避免出现代码跳过变量的定义和初始化的情况。
现在我们考虑如下的情况:
<span style="font-size:14px;">#include <iostream>
using namespace std;

int main()
{
    bool b = false;

    switch (false)
    {
        case true:
            int ival;
            break;

        case false:
            ival = 3;
            cout << ival << endl;
    }

    return 0;
}</span>
变量从它的定义点开始有效,直到它所在块结束为止;变量的声明和定义的作用是在静态域,与它是否执行到没有关系。int ival; 这是一个定义,它无需执行则在switch的整个作用域中有效,因此此段代码执行无误,不会报错。但是如果将此句改成定义并初始化:int ival = 0; 或string ival;,就会报错:error C2360: “ival”的初始化操作由“case”标签跳过,且定义ival后的每个case标号都会报这个错误。
因此,1)如果某个变量在多个case语句中会用到,需要在最后一个case标号或default标号后面定义初始化变量;2)如果需要为某个特殊的case定义变量,则可以引入块语句,变量只在该块中有效。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值