浅析内存陷阱以switch-case举例

#include
using namespace std;


int main(int argc, char *argv[])
{
    int a =0;
    switch(a)
    {
        case 0: int b=1;cout<break;
        case 1: cout<break;
        default:break;
    }
    return 0;

}

提示跳过了变量b的初始化过程。对于一个局部变量,它的作用域为它所定义的地方到它所在的语句块结束为止,那么对于变量b,它所在的最小语句块为switch{}块,那么也就说在case 0后面的部分,变量b都是可见的(注意在case 0之前变量b是无法访问的)。考虑这样一种情况,当a的值为1,那么程序就跳到case 1执行,此时b虽然可以访问,但是跳过了它的初始化过程。而如果在定义变量的同时进行了初始化,表明程序员希望初始化这个变量,但是此时跳过了该变量的初始化,就可能导致程序出现程序员无法意料的情况,因此编译器为了避免跳过这样的初始化而造成无法预料的结果,就对该语句进行报错。

考虑到这点常规的解决办法是这样的,在case 1:后面加上{ }表示这是一个单独的作用域,括号外的语句他是不可见的。浅析内存陷阱以switch-case举例_第1张图片

你可能感兴趣的:(浅析内存陷阱以switch-case举例)