专栏首页C++核心准则原文翻译C++核心准则ES.26: 不要将一个变量用于两个无关的用途

C++核心准则ES.26: 不要将一个变量用于两个无关的用途

ES.26: Don't use a variable for two unrelated purposes

ES.26: 不要将一个变量用于两个无关的用途

Reason(原因)

Readability and safety.

可读性和安全性。

Example, bad(反面示例)

void use()
{
    int i;
    for (i = 0; i < 20; ++i) { /* ... */ }
    for (i = 0; i < 200; ++i) { /* ... */ } // bad: i recycled
}
Note(注意)

As an optimization, you may want to reuse a buffer as a scratch pad, but even then prefer to limit the variable's scope as much as possible and be careful not to cause bugs from data left in a recycled buffer as this is a common source of security bugs.

作为一种优化,你可能将buffer用作告诉暂存区,即使是这种用情况最好还是尽可能限定变量的作用域,而且注意不要因为留在循环使用的buffer中的数据引发错误。这是安全错误的一个常见来源。

void write_to_file() {
    std::string buffer;             // to avoid reallocations on every loop iteration
    for (auto& o : objects)
    {
        // First part of the work.
        generate_first_string(buffer, o);
        write_to_file(buffer);

        // Second part of the work.
        generate_second_string(buffer, o);
        write_to_file(buffer);

        // etc...
    }
}
Enforcement(实施建议)

Flag recycled variables.

标记循环使用的变量。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es26-dont-use-a-variable-for-two-unrelated-purposes

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

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

原始发表时间:2020-04-29

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则ES.84:不要定义无名局部变量

    ES.84: Don't try to declare a local variable with no name

    面向对象思考
  • C++核心准则C.152:永远不要将派生类数组的指针赋值给基类指针

    Subscripting the resulting base pointer will lead to invalid object access and p...

    面向对象思考
  • C++核心准则C.183: 不要使用联合体实现双关类型

    It is undefined behavior to read a union member with a different type from the o...

    面向对象思考
  • angularJS学习之路(七)---子控制器关于是引用机制还是复制机制的问题---原型继承

    原型继承 要弄清一点:    修改父级对象中的alue值会同时修改 子对象中的alue值,但是反过来就不行了,

    wust小吴
  • Mac 设置 Home / End 键

    苹果电脑的键盘是没有 Home / End 两个键的,通常是使用 Command + -> 和 Command + <- 使用非常不便。 下面介绍一下如果设置 ...

    netkiller old
  • 一张图撸明白prototype原型链

    expression instanceof class expression和class都是必选项。

    Jean
  • 文字识别接入常见问题

    https://cloud.tencent.com/act/event/ocrdemo

    用户1529147
  • 商业分析与数据分析、算法模型的关系与区别

    我们常说,办事情要“名正言顺”,而数据领域的名字则是格外的多,商业分析、数据分析、数据挖掘、算法模型……经常把大家绕晕,今天系统科普一下。

    接地气的陈老师
  • Ajax前端验证demo

    简单、
  • 商业分析与数据分析、算法模型的关系与区别

    我们常说,办事情要“名正言顺”,而数据领域的名字则是格外的多,商业分析、数据分析、数据挖掘、算法模型……经常把大家绕晕,今天系统科普一下。

    Datawhale

扫码关注云+社区

领取腾讯云代金券