ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++系列十:日常学习-Lambda表达式 [打印本页]

作者: 道家人    时间: 2023-9-23 02:26
标题: C++系列十:日常学习-Lambda表达式
目录

前言

有C#经验,使用起来,驾轻就熟。
就是语法糖。但是也要熟悉用法,才好众享丝滑。
内容参考:
Chatjpt、文心一言
必备理论知识:
  1. 捕获列表:
  2. []:默认不捕获任何变量;
  3. [=]:默认以值捕获所有变量;内部有一个相应的副本
  4. [&]:默认以引用捕获所有变量;
  5. [x]:仅以值捕获x,其它变量不捕获;
  6. [&x]:仅以引用捕获x,其它变量不捕获;
  7. [=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
  8. [&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
  9. [this]:通过引用捕获当前对象(其实是复制指针);
  10. [*this]:通过传值方式捕获当前对象;
  11. lambda表达式的参数形式:
  12. 1. 无参数:[]() { /* function body */ };
  13. 2. 具名参数:[](int a, int b) { /* function body */ };
  14. 3. 默认参数:[](int a = 0, int b = 1) { /* function body */ };
  15. 4. 参数包:[](int a, ...) { /* function body */ };
  16. 注意点:
  17. 1. 有箭头就必要有显式返回类型 -> int
  18. 2. lambda 表达式在某些情况下可能会比函数指针或函数对象更耗费资源,需要注意性能问题。
  19. 3. 慎重选择捕获列表中的变量。按值捕获会在 lambda 表达式创建时复制变量的值,而按引用捕获则直接引用外部变量。
  20. 4. 复杂的表达式;返回类型最好明确指定。
  21. 5. 在 lambda 表达式内部添加适当的异常处理机制以确保程序的健壮性。
  22. 6. 在多线程环境中使用 lambda 表达式时,需要格外小心,确保正确地同步共享数据,以避免竞态条件和数据竞争问题。??(我还只小懂呢,先记着)
  23. [捕获列表] (参数列表) -> 返回类型 {
  24.     // lambda 表达式的主体
  25. }
复制代码
例子:

[code]auto print = []() {cout




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4