switch里面报crosses-initialization

文章讨论了在C++中遇到的交叉初始化问题,指出在switch语句中直接跳转到局部变量作用域内并使用未初始化的变量会导致编译失败。只有当变量是POD类型并且没有初始值时,这样的跳跃才是允许的。解决方案是确保变量在使用前被正确初始化。

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

如下写法会报错crosses initialization of ‘int r’

    switch(i) {
        case 1:
            int r = 1; // Failed to Compile
            cout << r;
            break;
        case 2:
            cout << r;
            break;
    };

正确的写法应该是

switch(i)
{
case 1:
    {
        int r = 1;
        cout << r;
    }
    break;
case 2:
    {
        int r = x - y;
        cout << r;
    }
    break;
};

标准说明如下:

It is possible to transfer into a block, but not in a way that
bypasses declarations with initialization. A program that jumps from a
point where a local variable with automatic storage duration is not in
scope to a point where it is in scope is ill-formed unless the
variable has POD type (3.9) and is declared without an initializer
(8.5).

https://stackoverflow.com/questions/2392655/what-are-the-signs-of-crosses-initialization

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值