12 May 2023

C++ 核心指南目录

“Use default to handle common cases (only)”

理由

代码清晰度。增加发现潜在错误的机会。

例子

enum E { a, b, c, d };

void f1(E x)
{
    switch (x) {
    case a:
        do_something();
        break;
    case b:
        do_something_else();
        break;
    default:
        take_the_default_action();
        break;
    }
}

这段代码很清晰的说明,x 为 a、b 的时候,需要特殊操作,其他默认情况则在 default 标签下。

例子

如果你只处理特殊的条件,没有默认的逻辑,怎么办?这时候,最好添加一个空的 default 段,不然别人不知道你是不是处理完全了所有的情况。

void f2(E x)
{
    switch (x) {
    case a:
        do_something();
        break;
    case b:
        do_something_else();
        break;
    default:
        // do nothing for the rest of the cases
        break;
    }
}

如果你去掉 default ,其他维护人员或编译器就会认为你已经把各种情况都考虑进去了:

void f2(E x)
{
    switch (x) {
    case a:
        do_something();
        break;
    case b:
    case c:
        do_something_else();
        break;
    }
}

你有没有漏掉 x == d 的情况?有时候,当你增加了枚举值的时候,很容易忘记添加响应的处理逻辑。这时候,就可能出麻烦了。

强化

标记在 switch 语句处理枚举的地方,没有处理所有枚举值,且没有 default 的情况。