为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
Why can you define a variable in a switch statement under 'default' but not under 'case'
我明白为什么我不能在'case'下定义一个变量,但是为什么我可以在'默认值下定义一个变量呢?我认为这是另一个标签,就像"案例"。
switch(myVar)
{
case 0:
int a = 12; //error
break;
default:
int b = 42; //OK
}
尝试重新排序您的案例:
switch(myVar)
{
default:
int b = 42; // error
break;
case 0:
int a = 12; // ok
}
现在,您将看到编译器抱怨b
,而不是a
。default
没有什么神奇的,只是如果您在上一个案例语句中定义了变量,那么就无法跳过该变量的初始化,因此这样做是完全可以的。
您始终可以调查案件,以便在案件之外无法访问变量,如果是您的意图:
switch(myVar)
{
case 0: {
int a = 12;
}
break;
default:
int b = 42;
}
您无法在case 0
下定义它,因为跳到默认标签(这是Switch语句所做的)将跳过a
的初始化。
C 禁止这样的跳过。如果在一个块中初始化了变量,则控件将无法进入超过初始化的块内部的点,而无需预先形成。
但是,由于 int
是没有构造函数的类型,因此,如果省略了初始化器,则可以定义变量:
switch(myvar)
{
case 0:
int a; //OK too
break;
default:
int b = 42; //OK
}
在开关语句之前初始化所有变量。
int a = 0;
switch(myVar)
{
case 0:
a = 12; //now ok
break;
default:
int b = 42; //OK
}
它与C 标准有关。更多信息在这里交叉初始化
您也可以做到这一点:
switch(myVar)
{
case 0:
{
int a = 0;
}
break;
default:
int b = 42; //OK
}
相关文章:
- 在C/C++中将变量名定义为__00000001有什么好处吗
- 如何避免在仅标头库中C++类/变量重定义
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 如何声明具有在声明下定义的类型的参数的函数?
- 有没有办法检查发送到变量的值是否是正确的类型,而它已经在该变量下?
- 在 C++ 中,我可以在不修改类的情况下定义对类的隐式转换吗?
- C++工作不统一,所有变量都定义
- 为什么 mfc 中静态文本工具中的变量未定义
- 在 mingw64- 变量下的窗口中编译 openvpn3 时出错,未在范围内声明
- 标头中的成员变量未定义
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 自我分配变量的定义
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- C 变量的定义,基本/6节
- 是否未在追加模式下定义 tellp()
- 在模板类定义下定义内联函数
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- 为什么我不能在这个条件下定义变量
- c++在switch语句中定义变量-在初始化/不初始化的情况下定义