看C++ primer 5th p176上说,switch结构只能在最后一个case或default标号后面定义变量。
但经我在gcc下测试,给定义int j=2时,确实会报错,但只定义int j,未给j指定初始化值时不会报错,为什么?
switch(5){
case 1:
//int j=2; //error: jump to case label [-fpermissive]
int j; //不报错
break;
case 2:
cout<<"2"<<endl;
break;
default:
cout<<j<<"default"<<endl;
break;
}
参照 https://www.zhihu.com/questio...
因为初始化的时候对分配的这块栈空间进行了赋值,如果这条语句被跳过后,编译器无法对栈空间进行还原处理。
只定义未初始化的话,定义的变量在全局都有效,只是一段未初始化的栈空间,无影响。