在C ++中的每个案例步骤中使用自动中断切换语句

时间:2015-06-29 14:56:48

标签: c++ switch-statement

如果我们想要一个switch语句,对于每种情况,我们需要运行一些指令然后打破我们会这样的事情:

switch (condition) {
   case (opt1):
      // do stuff
      break;
   case (opt2):
      // do stuff
      break;
   case (opt3):  
      // do stuff
      break;
   // ...
   default:
      // do stuff
}

是否有可能有一个独占开关,没有通过,默认情况下每个选项应该中断,而不必明确说明中断指令?如果不是在C ++中,是否有其他命令式语言可以使用这样的功能?

3 个答案:

答案 0 :(得分:3)

C#也需要break,但如果你没有说出来,就会对你大喊大叫。您需要goto label;明确地通过。

在C ++中,没有办法本机地执行此操作(当然,除了可怕的宏之外)。但是,Clang有-Wimplicit-fallthrough警告。然后,您可以插入[[clang::fallthrough]];以使警告静音以进行深思熟虑的坠机。

文档:http://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough

答案 1 :(得分:1)

我不喜欢在开关中包含break语句,因此我使用将开关包装在闭包中并从每种情况返回的模式。例如:

auto result = [&] {
  switch(enum_val) {
    case A:
      return Foo();
    case B:
      return Bar();
  }
}();

答案 2 :(得分:0)

Golang中没有“自动摔倒”。 https://golang.org/doc/effective_go.html#switch