C++ switch..case语句中变量跨域问题探讨及解决方法

运行以下代码:

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	int a = 1;
	switch (a)
	{
	case 0:
		int b = 0;
		break;
	case 1:
		break;
	default:
		break;
	}
	getchar();
	return 0;
}

可以得到两个错误:

报错原因 :case 标签之间不允许出现跨越初始化的跳转。简单来说就是变量b在case语句里初始化了,并且编译器认为变量b的作用域范围会影响case1和default,这在C++中是不允许的。

用底层一点的语言解释报错原因,代码如下:

cpp 复制代码
	switch (1)
	{
	case 0:
		int b = 0;
		break; 
	case 1:
		b = 0;
		break;
	}

【变量定义】操作在编译阶段就会执行分配内存,而涉及【变量初始化】操作的语句则必须等到程序运行时才会调用执行,故以上代码会报错,但是以下代码能正常运行,也是这个原因

cpp 复制代码
	switch (1)
	{
	case 0:
		int b;
		break;
	case 1:
		b = 0;
		break;
	}

解决方法1:在case分支中用花括号 {} 限制变量的作用域,确保该变量的生命周期不会跨越到其他case分支。如下代码所示:

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	int a = 1;
	switch (a)
	{
	case 0:
	{// 增加花括号限制变量的作用域
		int b = 0;
		break;
	}
	case 1:
		break;
	default:
		break;
	}
	getchar();
	return 0;
}

解决方法2: 在switch语句外部声明变量,然后在case分支中进行赋值。

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	int a = 1;
	int b;// 提升作用域
	switch (a)
	{
	case 0:
		b = 0;
		break;
	case 1:
		break;
	default:
		break;
	}
	getchar();
	return 0;
}

解决方法3: 将包含变量初始化的代码封装到函数中,然后在case分支中调用函数。

cpp 复制代码
#include<iostream>
using namespace std;

// 封装变量
void ToB()
{
	int b = 0;
}

int main()
{
	int a = 1;
	switch (a)
	{
	case 0:
		ToB();// 调用函数
		break;
	case 1:
		break;
	default:
		break;
	}
	getchar();
	return 0;
}
相关推荐
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
神仙别闹8 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员8 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
伞伞悦读8 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
qq_1998868711 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
2601_9669496511 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717611 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
汉克老师12 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者13 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN114267600813 小时前
1.3第一个程序的介绍
开发语言·qt