C++ lambda表达式

简介: C++ lambda表达式

一、表达式

[capture] {params} opt -> ret {body;};
capture 捕获列表
params 参数列表
opt 函数选项
ret 返回类型
body 函数体

二、捕获列表

[]不捕获任何变量
[&] 捕获外部作用域中所有变量 引用 使用
[=] 捕获外部作用域中所有变量按 值 使用
[=,&foo] 捕获外部作用域中所有变量按 值 使用,foo  引用 使用
[bar] 捕获bar按 值 使用
[this] 捕获当前类的this指针

注意lambda表达式按值捕获的变量,变量发生变化,调用表达式使用的还是之前捕获的值

int a = 0;
auto f = [=]{return a;}
a += 1;
std::cout<<f()<<std::endl;//输出0

如果希望修改按置捕获的外部变量

int a = 0;
auto f1 = [=]() mutable{return ++a; };
std::cout << f1();

注意 :mutable修饰的lambda表达式要写明参数列表,即()

三、参数列表

注意 :无参数时参数列表可以省略


相关文章
|
3天前
|
C++
C++语言的lambda表达式
C++从函数对象到lambda表达式以及操作参数化
|
5天前
|
算法 编译器 C++
C++一分钟之—Lambda表达式初探
【6月更文挑战第22天】C++的Lambda表达式是匿名函数的快捷方式,增强函数式编程能力。基本语法:`[capture](params) -&gt; ret_type { body }`。例如,简单的加法lambda:`[](int a, int b) { return a + b; }`。Lambda可用于捕获外部变量(值/引用),作为函数参数,如在`std::sort`中定制比较。注意点包括正确使用捕获列表、`mutable`关键字和返回类型推导。通过实践和理解这些概念,可以写出更简洁高效的C++代码。
29 13
|
9天前
|
C++
C++一分钟之-理解C++的运算符与表达式
【6月更文挑战第18C++的运算符和表达式构成了编程的基础,涉及数学计算、逻辑判断、对象操作和内存管理。算术、关系、逻辑、位、赋值运算符各有用途,如`+`、`-`做加减,`==`、`!=`做比较。理解运算符优先级和结合律至关重要。常见错误包括优先级混淆、整数除法截断、逻辑运算符误用和位运算误解。解决策略包括明确优先级、确保浮点数除法、正确使用逻辑运算符和谨慎进行位运算。通过实例代码学习,如 `(a &gt; b) ? &quot;greater&quot; : &quot;not greater&quot;`,能够帮助更好地理解和应用这些概念。掌握这些基础知识是编写高效、清晰C++代码的关键。
17 3
|
14天前
|
C语言 C++ 容器
c++primer plus 6 读书笔记 第五章 循环和关系表达式
c++primer plus 6 读书笔记 第五章 循环和关系表达式
|
19天前
|
计算机视觉 C++
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
17 0
|
29天前
|
存储 编译器 C语言
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题(下)
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
35 5
|
29天前
|
算法 编译器 C语言
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题(中)
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
27 2
|
29天前
|
算法 编译器 C语言
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题(上)
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
17 1
|
1月前
|
存储 算法 C++
C++11:lambda表达式 & 包装器
C++11:lambda表达式 & 包装器
18 0
|
1天前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
2 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)