11 May 2023

C++ 核心指南目录

“Don’t rely on implicit fallthrough in switch statements”

理由

总是以 break 结束有语句的 case 。不小心漏掉 break 是很常见的 bug。故意设置的 fallthrough 会导致维护灾难。必须清晰说明且尽量少用。

例子

switch (eventType) {
case Information:
    update_status_bar();
    break;
case Warning:
    write_event_log();
    // Bad - implicit fallthrough
case Error:
    display_error_window();
    break;
}

多个 case 共用一个执行语句段是可以的。

switch (x) {
case 'a':
case 'b':
case 'f':
    do_something(x);
    break;
}

case 中返回的话,也可以不用加 break

switch (x) {
case 'a':
    return 1;
case 'b':
    return 2;
case 'c':
    return 3;

}

例外

如果实际需要 fallthrough 机制,可以显式的用 [[fallthrough]] 标记说明:

switch (eventType) {
case Information:
    update_status_bar();
    break;
case Warning:
    write_event_log();
    [[fallthrough]];
case Error:
    display_error_window();
    break;
}

强化

标记所有隐式 fallthrough 的非空 case