这个问题主要针对C/C++,但我猜其他语言也是相关的.
我无法理解为什么仍然使用switch/case而不是if/else if.在我看来,很像使用goto,并导致相同类型的混乱代码,而相同的结果可以使用if/else,如果是更有条理的方式.
不过,我经常看到这些块.找到它们的一个常见位置是在消息循环(WndProc ...)附近,而这些是它们引发最严重破坏的地方之一:变量在整个块中共享,即使不是主要的(也不是在里面初始化).必须特别注意不要放弃休息,等等......
就个人而言,我避免使用它们,我想知道我错过了什么?
它们比if/else更有效吗?它们是否继承传统?
我们每个人(可能)都有童年的写作梦想:
switch(my_std_string) {
case "foo": do_stuff(); break;
case "bar": do_other_stuff(); break;
default: just_give_up();
}
Run Code Online (Sandbox Code Playgroud)
但这是不可能的,正如古代(2009年)对这个问题的答案所解释的那样:
从那时起,我们已经看到了C++ 11的出现,它让我们走得更远:
switch (my_hash::hash(my_std_string)) {
case "foo"_hash: do_stuff(); break;
case "bar"_hash: do_other_stuff(); break;
default: just_give_up();
}
Run Code Online (Sandbox Code Playgroud)
如在描述答案来编译时间字符串哈希 -这是没有那么糟糕,但它实际上并没有做正是我们想要的-有碰撞的机会.
我的问题是:从那时起语言的发展(我认为主要是C++ 14)是否影响了编写一个字符串case语句的方式?或简化实现上述目的的螺母和螺栓?
具体而言,与结束C++ 17标准之中指日可待 -我很感兴趣,鉴于我们可以假设标准将包含答案.
注意:这不是关于使用switch语句的优点的讨论,也不是关于meta的线程的讨论.我问的是一个内容丰富的问题,所以请在此基础上回答/ up/downvote.