C++语法switch-case中的变量定义(很久在新浪博客的整理)

本文介绍了C++中switch-case语句的一个常见问题,即在case内部定义的变量作用域超出预期,可能导致错误。当遇到变量未初始化的报错时,可以通过在case内部增加{}来限制变量的作用域。文章提到了使用{}来解决这个问题的原因,并指出在不同case间,未被显式销毁的变量仍然可访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天的代码中涉及switch-case语句又出现了某个变量没有初始化的报错,如下提示:

switch(cmd)

{

..............................

case CMD_FAC_DEFAULT:
TvApi_RestoreDefault();
//{
CChannel *pChannel = TvApi_GetChannel(0);
if (pChannel != NULL) {
TvApi_PlayChannel(pChannel,false,true);
delete pChannel;

}
// }

break;

case ....:

break;
}

error: jump to case label
error: crosses initialization of 'CChannel* pChannel'

之前也遇到了这种情况,我总是在整个case条件加上{}来解决,从来没有细究过原因,一个老同事告诉我在中间变量定义的地方加{}也可以,当时不明所以,在网上查了一些资料都没查到点上,是一个同事的提醒我找到的,原来switch-case语句中的变量定义要考虑作用域。

在C++中,switch-case中的case只是一个标签,case中的代码并没有构成一个局部作用域,也就是说,所有在case里面定义的变量作用域都是switch{...},在后面其他case中依然可以访问到这个变量.怎么感觉自己讲不明白呢,还是贴个不错的链接吧:

http://blog.youkuaiyun.com/tonywearme/article/details/7075809

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值