为什么这个if语句与switch语句中的case块重叠?

时间:2018-01-26 19:33:22

标签: c++ c switch-statement

我遇到了一些类似下面的代码。我相信我理解它的作用,但我不知道它为什么会起作用,为什么它不是语法错误。我认为if会创建一个新的范围并打破switch语句。 C / C ++编译器如何解析它?

switch(num) {
case 1:
    if (cond) {
case 2:
    foo();
    break;
    } else {
    bar();
    break;
    }
case 3:
    ...

作为参考,这是为不同的起始值调用的内容:

(num = 1, cond = true ) -> foo()
(num = 2, cond = true ) -> foo()
(num = 1, cond = false) -> bar()
(num = 2, cond = false) -> foo()

有趣的是,这似乎不适用于Java。

0 个答案:

没有答案