为什么不能在switch语句中声明变量

为什么不能在 switch 语句的 case 标签之后声明变量?在 C++ 中,你几乎可以在任何地方声明变量(并且将它们声明在首次使用附近显然是件好事),但以下代码仍然无法工作:

switch (val)
{
    case VAL:
        // 这样做不会起作用
        int newVal = 42;
        break;
    case ANOTHER_VAL:
        ...
        break;
}

上述代码会给我以下错误(MSC):

‘newVal’ 的初始化被 ‘case’ 标签跳过

这似乎也是其他语言的一个限制。为什么会存在这样的问题?


Case 语句只是标签。这意味着编译器会将其解释为直接跳转到该标签。在 C++ 中,这里的问题是作用域问题。你的花括号定义了 switch 语句内部的作用域。这意味着你将得到一个作用域,在这个作用域中,跳转会进一步进入代码并跳过初始化。

正确处理这个问题的方法是在特定的 case 语句中定义一个特定的作用域,并在其中定义你的变量:

switch (val)
{
    case VAL:
    {
        // 这样可以工作
        int newVal = 42;
        break;
    }
    case ANOTHER_VAL:
        ...
        break;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李星星BruceL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值