道家人 发表于 2023-9-23 02:26:06

C++系列十:日常学习-Lambda表达式

目录

[*]前言
[*]必备理论知识:
[*]例子:

前言

有C#经验,使用起来,驾轻就熟。
就是语法糖。但是也要熟悉用法,才好众享丝滑。
内容参考:
Chatjpt、文心一言
必备理论知识:

捕获列表:
[]:默认不捕获任何变量;
[=]:默认以值捕获所有变量;内部有一个相应的副本
[&]:默认以引用捕获所有变量;
:仅以值捕获x,其它变量不捕获;
[&x]:仅以引用捕获x,其它变量不捕获;
[=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
[&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
:通过引用捕获当前对象(其实是复制指针);
[*this]:通过传值方式捕获当前对象;

lambda表达式的参数形式:
1. 无参数:[]() { /* function body */ };
2. 具名参数:[](int a, int b) { /* function body */ };
3. 默认参数:[](int a = 0, int b = 1) { /* function body */ };
4. 参数包:[](int a, ...) { /* function body */ };

注意点:
1. 有箭头就必要有显式返回类型 -> int
2. lambda 表达式在某些情况下可能会比函数指针或函数对象更耗费资源,需要注意性能问题。
3. 慎重选择捕获列表中的变量。按值捕获会在 lambda 表达式创建时复制变量的值,而按引用捕获则直接引用外部变量。
4. 复杂的表达式;返回类型最好明确指定。
5. 在 lambda 表达式内部添加适当的异常处理机制以确保程序的健壮性。
6. 在多线程环境中使用 lambda 表达式时,需要格外小心,确保正确地同步共享数据,以避免竞态条件和数据竞争问题。??(我还只小懂呢,先记着)

[捕获列表] (参数列表) -> 返回类型 {
    // lambda 表达式的主体
}例子:

auto print = []() {cout
页: [1]
查看完整版本: C++系列十:日常学习-Lambda表达式