C++ lambda表达式捕获列表&符号含义及相关语法疑问
你给出的代码是C++的Lambda表达式语法,具体问题解答如下:
imagecb = [ &, xx, yy, zz] (uint32_t a1, int a2) { ... }
问题1:捕获列表中&符号的含义
方括号[]是Lambda表达式的捕获列表,用来指定Lambda内部可以访问外部作用域的哪些变量、以及对应的访问方式:
- 这里单独写的
&属于默认捕获符,含义是外部作用域中所有未在捕获列表里显式指定的变量,都按引用方式捕获,Lambda内部修改这类变量会直接同步到外部的原始变量。 - 后面显式列出的
xx, yy, zz属于显式值捕获,这三个变量会以拷贝的方式传入Lambda内部使用,内部修改不会影响外部的原始变量。
补充:如果默认捕获符写的是
=,就代表未显式指定的外部变量默认按值拷贝捕获。
问题2:是否是声明带a1、a2的内联函数
不是。这段代码是给变量imagecb赋值了一个Lambda匿名可调用对象,和普通内联函数有本质区别:
- Lambda本质是编译器生成的独有匿名类类型的实例,不属于普通函数声明的范畴。
- Lambda没有强制内联属性,是否会被编译器内联展开完全取决于优化策略,和语法本身没有绑定关系。
- 括号里的
uint32_t a1, int a2确实是这个Lambda可调用对象的形参列表,调用该Lambda时需要传入对应类型的两个参数。
内容的提问来源于stack exchange,提问作者Robber Pen
相关产品推荐
相关产品推荐

