c++ - 大小写切换是这样工作的吗?

标签 c++ c

我今天看到一段大小写切换代码,看到它的工作原理有点惊讶。代码是:

switch (blah)
{
case a:
  break;
case b:
  break;
case c:
case d:
case e: 
  {
    /* code here */
  }
  break;
default :
  return;
}

令我惊讶的是,在变量为 c 的情况下,路径进入了“code here”部分。我同意大小写切换的 c 部分末尾没有中断,但我本以为它会通过 default 代替。当您到达 case blah: 行时,它不会检查您的当前值是否与特定情况相匹配然后才让您进入特定段吗?否则,有什么意义?

最佳答案

这称为 case fall-through,是一种理想的行为。它允许您在案例之间共享代码。

如何使用 case fall-through 行为的示例:

switch(blah)
{
case a:
  function1();
case b:
  function2();
case c:
  function3();
  break;
default:
  break;
}

如果在blah == a时输入开关,那么会执行function1()function2()function3().

如果您不希望出现这种行为,可以通过包含 break 语句来选择退出。

switch(blah)
{
case a:
  function1();
  break;
case b:
  function2();
  break;
case c:
  function3();
  break;
default:
  break;
}

switch 语句的工作方式是(或多或少)执行 goto 以跳转到您的 case 标签,并从该点继续运行。当执行遇到 break 时,它会离开 switch block 。

关于c++ - 大小写切换是这样工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146106/

相关文章:

c - 为什么我得到一个close : Bad file descriptor error for this fork pipe c program?

c - 二进制、 float 和现代计算机

c - 如何给另一个指针赋值

c++ - 单向链表的头部一直指向列表中的最后一项

c++ - 发布版本中的 Visual C++ 6 编译错误

c++ - std::function 与标准函数

c - 在 C (Linux) 中,我如何才能知道 squareroot(n) = Integer

c++ - 如何让 std::list <std::string>::iterator 输出错误值?

C++ 继承和成员函数指针

c - if语句歧义