专栏首页C++核心准则原文翻译C++核心准则ES.76:避免使用goto语句​

C++核心准则ES.76:避免使用goto语句​

ES.76: Avoid goto

ES.76:避免使用goto语句

Reason(原因)

Readability, avoidance of errors. There are better control structures for humans; goto is for machine generated code.

可读性,避免错误。存在另外的更好的代码结构可用。

Exception(例外)

Breaking out of a nested loop. In that case, always jump forwards.

从嵌套循环中跳出。这种情况下,总是向前(代码执行角度的向前,译者注)跳。

for (int i = 0; i < imax; ++i)
    for (int j = 0; j < jmax; ++j) {
        if (a[i][j] > elem_max) goto finished;
        // ...
    }
finished:
// ...
Example, bad(反面示例)

There is a fair amount of use of the C goto-exit idiom:

存在相当数量的使用goto-exit惯用法的C代码。

void f()
{
    // ...
        goto exit;
    // ...
        goto exit;
    // ...
exit:
    // ... common cleanup code ...
}

This is an ad-hoc simulation of destructors. Declare your resources with handles with destructors that clean up. If for some reason you cannot handle all cleanup with destructors for the variables used, consider gsl::finally() as a cleaner and more reliable alternative to goto exit。

这是析构函数特别合适的使用场景。定义资源管理类,在它的析构函数中执行清除动作。如果由于某种原因,析构函数不能在所有情况下中实现完全地清除,考虑使用gsl::finally作为清除器和goto的更可靠代替手段。

Enforcement(实施建议)

  • Flag goto. Better still flag all gotos that do not jump from a nested loop to the statement immediately after a nest of loops.
  • 标记goto语句。最好标识所有的goto语句。只有一种例外情况:从嵌套循环内跳转到紧接在循环之后的代码。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es76-avoid-goto

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则ES.102:使用有符号数进行数学运算

    Because most arithmetic is assumed to be signed; x - y yields a negative number ...

    面向对象思考
  • C++核心准则Per.1,2,3,4 慎重地优化代码

    If there is no need for optimization, the main result of the effort will be more...

    面向对象思考
  • C++核心准则ES.75: 避免使用do语句

    Readability, avoidance of errors. The termination condition is at the end (where...

    面向对象思考
  • Python3 goto 语句的使用

    于小勇
  • 软件测试从业者终极目标,线上零BUG如何实现 ?

    每次版本发布上线后,测试人员,心里总是忐忑和紧张的;总在担心,会不会有啥严重的稀奇古怪的Bug出现 。

    IDO老徐
  • Django之跨域请求

    人生不如戏
  • Python的艺术玩法——“孔雀开屏”篇

    本文用Python实现一个“孔雀开屏”的效果,Python也可以这么玩。下面是源码,注释里面的是不同画面的执行代码。

    一石匠人
  • 学界 | Google Brain提出基于固定尺寸记忆表示的注意力模型,翻译任务推理速度提高20%

    AI科技评论按:Attention模型是近些年来自然语言处理领域重要的进展之一。注意力模型是从认知心理学中人脑注意力模型中引入的概念,在人观察世界时,对不同对象...

    AI科技评论
  • 【文本信息抽取与结构化】详聊文本的结构化【下】

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式。这一点在知识...

    用户1508658
  • MAC上使用Android Studio 3.0的Gradle问题小解

    2017-06-11 by Liuqingwen | Tags: Android Gradle | Hits

    IT自学不成才

扫码关注云+社区

领取腾讯云代金券