目录
前言
有C#经验,使用起来,驾轻就熟。
就是语法糖。但是也要熟悉用法,才好众享丝滑。
内容参考:
Chatjpt、文心一言
必备理论知识:
- 捕获列表:
- []:默认不捕获任何变量;
- [=]:默认以值捕获所有变量;内部有一个相应的副本
- [&]:默认以引用捕获所有变量;
- [x]:仅以值捕获x,其它变量不捕获;
- [&x]:仅以引用捕获x,其它变量不捕获;
- [=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
- [&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
- [this]:通过引用捕获当前对象(其实是复制指针);
- [*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 表达式的主体
- }
复制代码 例子:
[code]auto print = []() {cout |