今天,我无意中发现,在没有大小写的 switch 语句中编写代码时,我的编译器不会报错。(它确实抱怨缺少 case 语句,但是在代码后面添加一个之后,并没有警告让我知道代码没用。)
我试图弄清楚是否有允许以下代码的目的,或者它是否只是“限制它的工作量更大,所以它是允许的”的事情之一。
#include <iostream>
void foo() {
std::cout << "foo" << std::endl;
}
int main()
{
for (int a = -10; a < 10; ++a)
{
switch(a)
{
foo();
case 4:
std::cout << "4" << std::endl;
}
}
}
现在,当 a == 4 时,它会按预期输出“4”,并且它永远不会输出 foo。所以问题是,是否有一些(可能深奥但有用的)理由允许foo();
在第一个案例之前声明?我确定我不允许在那里声明和初始化变量。
(FWIW,我已经在几个编译器上对此进行了测试,它们都产生了相同的行为。令人惊讶的是,它们也都没有输出警告。)