c++ 11 lambda表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <typeinfo>
#include <type_traits>
#include <memory>
#include <thread>
#include <atomic>
using namespace std;
// lambda函数的语法定义:(采用了追踪返回类型的方式声明其返回值)
// [capture](parameters) mutable -> return-type{statement;}
// [],捕捉列表,捕捉上下文中的变量以供lambda函数使用
/*[]    表示    空捕捉
 *[=]   表示值  传递方式捕捉所有父作用域的变量(包括this)
 *[&]   表示引用传递方式捕捉所有父作用域的变量(包括this)
 *[var] 表示值  传递方式捕捉变量var
 *[&var]表示引用传递方式捕捉变量var 
 *[this]表示值  传递方式捕捉当前this指针 (this。函数体内可以使用Lambda所在类中的成员变量。)
 *其它组合形式:
 * */
class Test{
public:
    Test(int a, int b): m_a(a),m_b(b){}
    void f1(int t){
        auto f = [this] {return m_a + m_b;}; // 省略参数列表,返回值由编译器推断为int
        cout <<__FILE__<< __LINE__ << "\t"  << f() + t <<endl;
    }
    int m_a;
    int m_b;
};
  
int main()
{
    [] {};  // 最简lambda函数
    int a = 3;
    int b = 4;
    // [=]
    auto c = [=] {return a + b;}; // 省略参数列表,返回值由编译器推断为int
    cout <<__FILE__<< __LINE__ << "\t"  << c() << endl;
    b ++;                         // 值捕捉注意: 它只捕捉一次。如需关联变量,用引用
    cout <<__FILE__<< __LINE__ << "\t"  << c() << endl;
    // [&]
    auto d = [&] {return a + b;}; // 省略参数列表,返回值由编译器推断为int
    cout <<__FILE__<< __LINE__ << "\t"  << d() << endl;
    b ++;                         // 值捕捉注意: 它只捕捉一次。如需关联变量,用引用
    cout <<__FILE__<< __LINE__ << "\t" << d() << endl;
    // [this]
    Test t(1,2);
    t.f1(9);
    return 0;
}

  

 

posted @   会飞的斧头  阅读(271)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示