我在课堂上一直在研究一个项目,到目前为止我编写的代码效果很好。我的代码的很大一部分使用嵌套的switch语句。虽然我将以现在的方式进行转换,但我想知道嵌套的switch语句通常不受欢迎以供将来参考。
答案 0 :(得分:2)
你可能已经注意到了,因为你问过,他们并不是最容易遵循的事情,所以我一般会尽量避免使用它们。
这并不意味着你不能做那种控制流程 - 诀窍是把案件分成他们自己的功能。这可以让有人阅读顶级开关,理解其分支和发生的事情(因为你当然会给你的功能提供良好的描述性名称),然后他们可以轮流检查每个功能,以便了解下一级别需要。
为了避免以前不必要的函数调用的成本,您可以标记函数inline
以使编译器有效地将函数体复制到调用站点。
它最终看起来像这个令人难以置信的通用和不完整的骨架:
int main() {
int thing;
char second_level_thing;
// various code which produces thing and second_level_thing
switch (thing) {
case 0: do_zero_case(second_level_thing); break;
case 1: do_one_case(); break;
default: do_default_case(); break;
}
// the rest of main
}
inline void do_zero_case(char second_level_thing) {
switch (second_level_thing) {
case 'a': // 0 -> a branch code
// etc...
}
}
// etc...
不将您的功能称为do_zero_case
!在它实际之后命名。
我想补充一点,如果多个级别正在检查相同的值,那就会发生一些非常奇怪的事情。
还有通过使用OOP技术(各种形式的虚拟方法调用),模板,高阶函数等可用的替代控制流。有时一个简单的switch
简单的Function
语句正是你所需要的!
答案 1 :(得分:0)
一般来说,如果和switch语句在proccessor的计算方面更加“costy”,因为每次跳转时都要强制汇编程序进行新的猜测(对于下一条指令将是什么)。如果主要关心的是算法效率,请尝试尽可能少地使用。