CppCoreGuidelines ES.79 只用 default 处理共用的逻辑
12 May 2023
“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
的情况。