前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++核心准则ES.28: 使用lambda表达式进行变量的复杂初始化,特别是常量变量

C++核心准则ES.28: 使用lambda表达式进行变量的复杂初始化,特别是常量变量

作者头像
面向对象思考
发布2020-05-20 00:17:57
7070
发布2020-05-20 00:17:57
举报

ES.28: Use lambdas for complex initialization, especially of const variables

ES.28: 使用lambda表达式进行变量的复杂初始化,特别是常量变量

Reason(原因)

It nicely encapsulates local initialization, including cleaning up scratch variables needed only for the initialization, without needing to create a needless non-local yet non-reusable function. It also works for variables that should be const but only after some initialization work.

这种方式漂亮地封装了局部初始化,包括清理只在初始化过程中需要的临时变量,而不是生成一个不必要的非局部但却不会重用的函数。它也可以用于应该是常量但却需要某些初始化处理的变量初始化.

Example, bad(反面示例)

代码语言:javascript
复制
widget x;   // should be const, but:
for (auto i = 2; i <= N; ++i) {          // this could be some
    x += some_obj.do_something_with(i);  // arbitrarily long code
}                                        // needed to initialize x
// from here, x should be const, but we can't say so in code in this style
Example, good(范例)
代码语言:javascript
复制
const widget x = [&]{
    widget val;                                // assume that widget has a default constructor
    for (auto i = 2; i <= N; ++i) {            // this could be some
        val += some_obj.do_something_with(i);  // arbitrarily long code
    }                                          // needed to initialize x
    return val;
}();
Example(示例)
代码语言:javascript
复制
string var = [&]{
    if (!in) return "";   // default
    string s;
    for (char c : in >> c)
        s += toupper(c);
    return s;
}(); // note ()

If at all possible, reduce the conditions to a simple set of alternatives (e.g., an enum) and don't mix up selection and initialization.

如果可能,将条件压缩为一个由可选项(例如枚举)构成的简单集合并且不要将选择和初始化混用。

Enforcement(实施建议)

Hard. At best a heuristic. Look for an uninitialized variable followed by a loop assigning to it.

很难。最好是启发式的。寻找没有初始化的变量的后面跟着为其赋值的循环的情况.

链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es28-use-lambdas-for-complex-initialization-especially-of-const-variables

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ES.28: Use lambdas for complex initialization, especially of const variables
  • Reason(原因)
    • Example, good(范例)
      • Example(示例)
        • Enforcement(实施建议)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档