专栏首页C++核心准则原文翻译C++核心准则ES.78:不要依靠switch语句的隐式下沉处理

C++核心准则ES.78:不要依靠switch语句的隐式下沉处理

ES.78: Don't rely on implicit fallthrough in switch statements

ES.78:不要依靠switch语句的隐式下沉处理

Reason(原因)

Always end a non-empty case with a break. Accidentally leaving out a break is a fairly common bug. A deliberate fallthrough can be a maintenance hazard and should be rare and explicit.

通常情况下使用break中止一个非空case处理。意外漏掉某个break通常是一个错误。故意的下沉处理可能带来维护风险,应该少用并明示用法。

Example(示例)

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

Multiple case labels of a single statement is OK:

一个语句中包含多个标签是没有问题的。

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

Return statements in a case label are also OK:

case标签中使用返回语句也没有问题:

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

Exceptions(例外)

In rare cases if fallthrough is deemed appropriate, be explicit and use the [[fallthrough]] annotation:

在很少的情况下,如果确信下沉处理是合适的,可以使用[[fallthrougn]]记法明确标明。

switch (eventType) {
case Information:
    update_status_bar();
    break;
case Warning:
    write_event_log();
    [[fallthrough]];
case Error:
    display_error_window();
    break;
}
Note(注意)
Enforcement(实施建议)

Flag all implicit fallthroughs from non-empty cases.

标记所有来自非空case的隐式下沉处理。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es78-dont-rely-on-implicit-fallthrough-in-switch-statements

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则CP.43:尽量减少花费在临界区中的时间​

    The less time is spent with a mutex taken, the less chance that another thread h...

    面向对象思考
  • C++核心准则CP.44:记得为lock_guards和unique_locks命名

    An unnamed local objects is a temporary that immediately goes out of scope.

    面向对象思考
  • C++核心准则C.180:使用联合体节约内存

    A union allows a single piece of memory to be used for different types of object...

    面向对象思考
  • 解决 Unexpected lexical declaration in case block 的问题

    Unexpected lexical declaration in case block(no-case-declarations)

    腾讯IVWEB团队
  • fallthrough语法

    程序员不务正业
  • 有了 elseif 为什么还要 switch case

    你有没有想过既然有了if elseif, 为什么还要设计一个switch case的语法出来呢? 按理说, 一个语言的设计角度来说, 关键词越少越好吧, 而且多...

    烟草的香味
  • 校长讲堂第六讲

    要理解 C 语言程序,仅了解构成它的关键字是不够的。还要理解这些关键字是如何构成声明、表达式、语句和程序的。尽管我们可以很清楚的找到这些关键字的定义以及用法,但...

    聚沙成塔
  • 现象级的「复联 4」,被预测票房三十亿美金创影史纪录

    场景描述:用数据挖掘、机器学习、自然语言处理等方法,对电影票房进行预测,为制片方、发行商、投资者以及影院提供参考与指导作用。

    HyperAI超神经
  • 浅谈微信小程序底层架构

    其实,小程序开发过程中我们面对的是iOS和Android微信客户端和辅助开发的小程序开发者工具。根据官方文档,这三大运行环境也是有所区别的:

    极乐君
  • 局域网linux系统CentOS上部署engineercms、docker和onlyoffice实现文档协作

    等了好久,这次终于下决心在局域网部署了linux系统,并安装docker和load了onlyoffice,利用engineercms进行资料管理和文档协作。

    hotqin888

扫码关注云+社区

领取腾讯云代金券