c++ lamda

2020-05-24  本文已影响0人  xinguoshui

[captures] (params) mutable-> type{...} //lambda 表达式的完整形式

在 lambda 表达式引出操作符[ ]里的“captures”称为“捕获列表”,可以捕获表达式外部作用域的变量,在函数体内部直接使用,这是与普通函数或函数对象最大的不同(C++里的包闭必须显示指定捕获,而lua语言里的则是默认直接捕获所有外部变量。)

捕获列表里可以有多个捕获选项,以逗号分隔,使用了略微“新奇”的语法,规则如下

[ ]        :无捕获,函数体内不能访问任何外部变量

[ =]      :以值(拷贝)的方式捕获所有外部变量,函数体内可以访问,但是不能修改。

[ &]      :以引用的方式捕获所有外部变量,函数体内可以访问并修改(需要当心无效的引用);

[ var]  :以值(拷贝)的方式捕获某个外部变量,函数体可以访问但不能修改。

[ &var] :以引用的方式获取某个外部变量,函数体可以访问并修改

[ this]  :捕获this指针,可以访问类的成员变量和函数,

[ =,&var] :引用捕获变量var,其他外部变量使用值捕获。

[ &,var]:只捕获变量var,其他外部变量使用引用捕获。

上一篇下一篇

猜你喜欢

热点阅读