如何在lambda表达式中使用引用形式捕捉局部变量

技术如何在lambda表达式中使用引用形式捕捉局部变量本篇文章为大家展示了如何在lambda表达式中使用引用形式捕捉局部变量,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获F.52

本文向您展示了如何在lambda表达式中通过引用来捕获局部变量。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

F.52 在lambda表达式中使用引用形式捕捉局部变量,包含向算法传递变量的情况。

注意:如果你不知道什么是捕获。

https://mp.weixin.qq.com/s/VuW_5OcX7uUUrMbsN2wxPQ

Reason(原因)

为了效率和正确性,当在本地使用lambda表达式时,几乎总是需要通过引用来捕获变量。这包括编写或调用本地并发算法,因为它们需要在返回之前满足。

00-1010

效率考虑:对于大多数类型,传输引用的成本低于传输值的成本。

关于正确性的考虑:很多调用都希望在调用端对原对象产生联合作用(参考下面的例子)(在执行被调用函数的同时)。价值无法做到这一点。

Discussion(讨论)

不幸的是,对于本地调用,没有简单的方法可以通过引用来捕获常量类型变量,以实现效率并避免级联效应。

注意:常量类型的应用应该引用函数声明中声明为常量的引用参数,这样既能提供高效率,又能提供写保护。

Note(注意)

这里,一个大对象(一个网络消息)被传递给一个迭代算法,复制该消息是无效的或不正确的(可能无法复制):

std:for_each(begin(套接字),end(套接字),[message](auto socket){ socket . send(消息);});

注:每个周期的复制成本也很高。

Example(示例)

这是一个简单的三阶段并发管道。每个状态对象封装一个工作线程和一个队列,一个进程函数处理入队,它的析构函数自动进入阻塞状态,等待队列变空后再关闭线程。

void send _ packets(buffersbufs){ stage encryptor([](buffer b){ encrypt(b));});stage compressor([](buffer b){ compress(b);encrypter . process(b);});stage decorator([](buffer b){ decorate(b));压缩机.工艺(b);});for(autob : bufs){ decorator . process(b);} }//自动blockswaitingforpipeline to finish

注意:代码中使用了隐式捕获。详情请参考https://mp.weixin.qq.com/s/RNpLqwekN3BJUbIN-DwVxQ.

00-1010标记了lambda表达式通过引用捕获变量的情况,但是它并没有在函数范围内本地使用,也没有通过引用传递给另一个函数。

注意:这是一个近似规则,但是可以标记为:传递一个很可能被调用方保存的指针,在通过参数访问的堆上的某个地方写入,返回lambda表达式,等等。生命周期条件组还提供了标记转义指针和引用的一般条件,并且还包括从lambda表达式派生的情况。

上面的内容是如何在lambda表达式中通过引用来捕获局部变量。你学到什么知识或技能了吗?如果你想学习更多的技能或丰富你的知识,请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/79845.html

(0)

相关推荐

  • php转十进制文本(php十六进制文本转十进制文本)

    技术php中2进制如何转文本流这篇文章主要介绍php中2进制如何转文本流,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! php 2进制转文本流的方法:1、创建一个PHP

    攻略 2021年12月15日
  • list结构

    技术list结构 list结构list结构
    list1 = ['i1', 'i2', 'i3', 'i4', 'i5']print(list1)
    print(list1[2]) # 通过索引来访问列表

    礼包 2021年12月9日
  • 如何理解Unicode与JavaScript

    技术如何理解Unicode与JavaScript如何理解Unicode与JavaScript,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。上个月,我做了一次

    攻略 2021年11月17日
  • 怎么把if-else重构成高质量代码

    技术怎么把if-else重构成高质量代码本篇内容介绍了“怎么把if-else重构成高质量代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年10月21日
  • Eclipse插件如何安装、升级和卸载

    技术Eclipse插件如何安装、升级和卸载这篇文章将为大家详细讲解有关Eclipse插件如何安装、升级和卸载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。安装在外部的插件的的目录结构通

    攻略 2021年11月26日
  • MySQL中预处理语句prepare、execute、deallocate怎么用

    技术MySQL中预处理语句prepare、execute、deallocate怎么用这篇文章将为大家详细讲解有关MySQL中预处理语句prepare、execute、deallocate怎么用,小编觉得挺实用的,因此分享

    攻略 2021年10月29日