Shi*_*rik 13 c++ language-design switch-statement
今天,我偶然发现我的编译器在没有case的情况下在switch语句中编写代码时不会抱怨.(它确实抱怨缺少案例陈述,但在代码之后添加一个,没有多少警告让我知道代码是没用的.)
我试图弄清楚是否有允许以下代码的目的,或者它只是其中一个"限制它的更多工作,所以它是允许的".
#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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当a == 4时,这会按预期输出"4",并且它永远不会输出foo.所以问题是,是否有一些(可能是深奥但有用的)理由允许foo();
在第一个案例之前发表声明?我知道我不能在那里声明和初始化变量.
(FWIW,我已经在几个编译器上对它进行了测试,它们都产生了相同的行为.令人惊讶的是,它们都没有输出警告.)
是的,行为与语言一样,您可以在不同的地方添加代码.Switch语句比外观复杂得多,它们允许非常深奥的代码,无论它是否有意义.
如果你想花一些时间查看一些奇怪的用法switch
和案例的位置,你可以看一下boost asio库中协同程序的实现.您可以使用宏编写一个小函数,编译并查看生成的代码(在宏扩展之后)的样子.
归档时间: |
|
查看次数: |
3259 次 |
最近记录: |