温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++非局部使用变量时怎么避免使用值捕捉

发布时间:2021-11-29 12:00:15 来源:亿速云 阅读:86 作者:iii 栏目:大数据

本篇内容介绍了“C++非局部使用变量时怎么避免使用值捕捉”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

如果捕捉的变量可以能被非局部使用,则应避免在lambda表达式中使用引用形式的捕捉。非局部使用包括返回,保存在堆中,或者传递给其他线程。

Reason(原因)

指向局部变量的指针和引用的生命周期不应该长于它们的作用域。通过引用捕捉变量的lambda表达式只是另外一个保存指向局部变量的引用的场所,如果这个lambda表达式(或拷贝)的生命周期超过作用域时不应该使用引用形式的变量捕捉。

Example, bad(反面示例)

int local = 42;
// Want a reference to local.// Note, that after program exits this scope,// local no longer exists, therefore// process() call will have undefined behavior!thread_pool.queue_work([&]{ process(local); });
Example, goodint local = 42;// Want a copy of local.// Since a copy of local is made, it will// always be available for the call.thread_pool.queue_work([=]{ process(local); });

Enforcement

  • (Simple) Warn when capture-list contains a reference to a locally declared variable

    (简单)当捕捉列表中包含本地声明的变量时报警。

  • (Complex) Flag when capture-list contains a reference to a locally declared variable and the lambda is passed to a non-const and non-local context

    (复杂)在捕捉列表中包含指向局部声明的变量而且lambda表达式被传递给非常量或非局部上下文时做出提示。

“C++非局部使用变量时怎么避免使用值捕捉”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI