在c ++中使用嵌套开关语句是不好的做法吗?

时间:2016-03-15 08:43:15

标签: c++ nested switch-statement

我在课堂上一直在研究一个项目,到目前为止我编写的代码效果很好。我的代码的很大一部分使用嵌套的switch语句。虽然我将以现在的方式进行转换,但我想知道嵌套的switch语句通常不受欢迎以供将来参考。

2 个答案:

答案 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”,因为每次跳转时都要强制汇编程序进行新的猜测(对于下一条指令将是什么)。如果主要关心的是算法效率,请尝试尽可能少地使用。