为自己发现了这样一个意想不到的东西:代码
switch (a) {
case 1:
std::string alfa;
break;
case 2:
break;
default:
break;
}
由于类变量声明而无法编译string。编译器报告它不能跳转到下一个标签:
1.cpp:16:9: error: cannot jump from switch statement to this case label
default:
^
但这是为什么呢?为什么,例如,如果您声明一个类型为 的变量int,那么一切都井井有条?
看 - 如果你收到
a==2并同时决定在分支中引用这个变量,他应该怎么做alfa?初始化它?不?为了避免这种技巧——跳过初始化——这被认为是一个错误。
只需将变量放在花括号中以限制范围:
具有工作的变体
int var;是因为这样的记录不会导致任何初始化。值得添加初始化,因为我们也会得到一个“跳跃”错误。std::string但是一个具有自己构造函数的复杂类,因此不需要显式初始化,并且仍然会调用默认构造函数。同时,
int变量仍然可以分配一个值并使用它,就好像在变量定义下面的任何分支中什么都没有发生一样。