c++ - 这个开关 block 是如何执行的?

标签 c++ linux g++

#include<bits/stdc++.h>
using namespace std;

void show(int errorCause)
{
    switch(errorCause)
    {
        case 1:
        {
            cout<<"in 1\n";
            break;
        }

        case 2: break;

        case 3:
        {
            cout<<"in 3\n";
            break;

            case 4: 
            {
                cout<<"in 4\n";
                case 5: cout<<"in 5\n";
                    break;
            }
        }
        break;

        default: 
        {
            cout<<"in deafult\n";
            break;
       }
    }
    return;
}

int main()
{
    show(5);
    return 0;
}

我使用了这个代码示例,但我无法弄清楚它的流程。根据我的说法,它应该匹配默认条件,因为 errorCause 不匹配任何东西,但它的输出是:

in 5

我不明白为什么它不会进入默认状态?

这是我的构建环境的详细信息:

编译器: g++ 版本 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)

系统: Ubuntu 14.04(64位)

最佳答案

你传递了 5,为什么 switch 语句不进入'case 5'?

为了清楚起见:删除 switch-block 中的所有这些花括号,它们都不是必需的。重新对齐和格式化代码,然后它应该清楚。

关于c++ - 这个开关 block 是如何执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40765174/

相关文章:

java - "No X11 DISPLAY variable"- 这是什么意思?

c++ - 使用 initializer_list 构造的 std::vector 未按预期运行

c++ - 显示时如何调整 QPlainTextEdit 小部件的大小

regex - 使用 sed 更改配置的 Bash 脚本

c++ - 有符号/无符号比较警告是什么意思?

linux - Linux中断中的剪切和粘贴

c++ - 为什么 std::seed_seq 根据 C++11 是不可复制的,为什么 gcc/clang 不符合?

gcc/g++ 选项将所有目标文件放在单独的目录中

c++ - c++中不必要的包含

c++ - 使用 GCC 从 *nix 交叉编译到 Windows 是否允许使用 VC++ 尚不支持的功能?