c++ lambda表达式

简介: c++ lambda表达式

lambda语法格式:

[捕获列表](函数参数) 可变规则 ->返回值类型{返回值类型}


1.捕获列表:

捕获列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用



捕获列表参数有以下形式:


[]表示不捕获任何变量

[var]表示值传递方式捕获变量var

[=]表示值传递方式捕获所有父作用域的变量(包括this)

[&var]表示引用传递捕捉变量var

[&]表示引用传递方式捕捉所有父作用域的变量(包括this)

[this]表示值传递方式捕捉当前的this指针
注意:捕捉列表不允许变量重复传递



2.函数参数

除了捕获列表之外,Lambda还可以接受输入参数。参数列表是可选的,类似于函数的参数列表



3.可变规格mutable

mutable修饰符, 默认情况下Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时。

4.异常说明

你可以使用 throw() 异常规范来指示 Lambda 表达式不会引发任何异常 。

5.返回类型

lambda表达式的返回类型会自动推导。除非你指定了返回类型,否则不必使用关键字。返回型类似于通常的方法或函数的返回型部分。但是,返回类型必须在参数列表之后,并且必须在返回类型到之前包含类型关键字。如果Lambda主体仅包含一个return语句或该表达式未返回值,则可以省略Lambda表达式的return-type部分。如果Lambda主体包含一个return语句,则编译器将从return表达式的类型中推断出return类型。否则,编译器将返回类型推导为void。


6.Lambda函数体

Lambda表达式的Lambda主体可以包含普通方法函数的主体可以包含的任何内容。普通函数和Lambda表达式的主体都可以访问以下类型的变量:


捕获变量

形参变量

局部声明的变量

类数据成员,当在类内声明this并被捕获时

具有静态存储持续时间的任何变量,例如全局变量

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