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

打印 上一主题 下一主题

主题 933|帖子 933|积分 2799

目录

前言

有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
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表