switch-case内不能定义变量?

news/2025/2/25 14:54:13

1. 报错

switch(something)

{

  case a:

    int a = 0;

    break;

  default:

    break;  

}

结果报错:

error: cannot jump from switch statement to this case label……

 

2. 错误原因

究其根本原因,是C++的一条规则:在任何作用域内,假如存在变量初始化语句,该初始化语句不可以被跳过,一定要执行

这里强调在作用域内的变量一旦初始化就不能跳过,但是可以跳过整个作用域!

比如初始化语句int a=0,就有虽然进入其所在的作用域,但是不被执行的风险,所以就报错了!

 

3. 如何修改

①把int a;移到switch和case之间:

switch(something)

{

  int a;

  case a:

    a = 0;

    break;

  default:

    break;  

}

②在case后+作用域符号{}

switch(something)

{

  case a:

  {

    int a = 0;

    break;

  }

  default:

    break;  

}

这两种修改,都保证了只要进入a的作用域,都会执行a的初始化语句!

 

4. 判断对错

switch(something)

{

  case a:

    int a;

    break;

  case b:

    a = 5;

    break;

  default:

    break;  

}

在C++中是正常编译和执行的,因为:int a只是定义了a,并没有初始化,没有违背上述规则!

编译的时候,编译到case a的时候分配空间,编译到case b的时候赋值,a的作用域就是switch后的整个{},完全没有问题。

 

5. 关于声明、定义和初始化:

①声明变量不会分配内存空间;

②定义变量int a,编译的时候会分配内存,但是并不会产生任何可执行的代码,

所以int a这句话只是在编译的时候有用,执行的时候跳过的时候也无所谓!

③初始化变量分配空间并初始化(编译时分配空间,运行时初始化赋值),假如存在,一定要执行!

 

转载于:https://www.cnblogs.com/Younger-Zhang/p/11316290.html


http://www.niftyadmin.cn/n/4646356.html

相关文章

RestTemplate-记录

org.springframework.web.client.RestTemplate 1、从使用功能上看,是一种简化请求响应的工具类,从发送请求,到对返回的结果进行json解析。格式不对会有异常。 转载于:https://www.cnblogs.com/fateSpace/p/11319311.html

ReactNative学习实例(九)数据永久化存储AsyncStorage

官方的使用文档在这里http://reactnative.cn/docs/0.43/asyncstorage.html#content AsyncStorage使用类似于安卓中sharedpreference的存储逻辑,从名字中就可以看出这是异步存储。调用的所有方法返回一个Promise对象,但是不需要对这个对象进行操作&#x…

力扣 -- 714. 买卖股票的最佳时机含手续费

题目链接:714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 参考代码: // class Solution { // public: // …

自动运行代码

自动运行代码 [CtrlA 全部选择 提示&#xff1a;你可先修改部分代码&#xff0c;再按运行] <div align"center"><P aligncenter><TEXTAREA rows12 cols78 classfm idcode><br>--完整的HTML代码放这--</TEXTAREA></P></div&g…

ReactNative学习实例(十)接管Back键BackAndroidToastAndroid

转自东方耀的学习视频 下面的这个例子实现了双击退出和类似于引导页的在第二页退出。 首先为BackAndroid设置监听器&#xff1a; componentWillMount() {BackAndroid.addEventListener(listener,this.onBackPressed);}componentWillUnMount() {BackAndroid.removeEventListener…

实现弹性组件效果(贝塞尔曲线阻尼函数)

1.贝塞尔曲线 贝塞尔曲线是一种画线的方法&#xff0c;主要是通过四个点确定一条线&#xff0c;首尾两个端点&#xff0c;中间两个点构成一条虚拟的标准线&#xff0c;曲线就根据这条线相切以及两个端点确定。 首先看看如何用贝塞尔曲线画出四分之一个圆&#xff1a; 请先参…

vs 快捷键 hotkey

1. type ‘prop’ press the tab key twice tab enter to auto-implemented properties. 转载于:https://www.cnblogs.com/recordlife/p/4816138.html

从源码角度看滑动冲突问题的解决

文章内容参考任玉刚老师的安卓开发艺术探索&#xff0c;并不是照搬&#xff0c;是我在理解基础上的重新总结。 首先要明白View的事件分发机制&#xff0c;这里的事件具体指的就是MotionEvent&#xff0c;我们可以通过getAction判断这个事件是按下抬起还是move事件。 还有一个概…