不带开关的case的使用,请解释这段代码的输出

问题描述

我们使用带有 switch 的案例。但这里的案例在认案例中,所以它应该需要多一个开关。但是代码没有给出任何编译时错误

 List<BluetoothGattService> services = gatt.getServices();

此外,输出是 Executing 4,然后是 Executing 1。据我说,输出应该是 Executing 1,因为每次都输入认值。当值为 1 时,它会进入 case 1。但首先请解释这是如何编译的,因为据我说应该有一个嵌套的开关。

解决方法

switch 中,所有 casedefault 都处于同一级别,您只是被(愚蠢?)缩进和相当不一致的默认使用所吸引。事实上,它应该是:

    switch(num)
    {
            default:
            case 1:
                std::cout<<"Executing "<<num<<"\n";
            
            case 2:
            case 3:
                break;
    }

含义:如果为 2 或 3,则什么也不做(中断),并为 1 或任何其他值显示 Executing ...

这会做同样的事情,恕我直言更具可读性:

    switch(num)
    {
        case 2:
        case 3:
            break;

        default:
            std::cout<<"Executing "<<num<<"\n";
    }
,

case 1 到 3 缩进错误。

这就是所谓的“失败”。 如果 switch 遇到 default 情况,它将失败,直到遇到中断,这意味着它将在途中执行其他情况。
在您的情况下,如果遇到 default 情况,它将执行 case 1case 2case 3

编辑:我建议以 break 结束每个案例并将 default 作为最后一个案例。 只有当您真的想深入了解并知道自己在做什么时,才可以省略 break