收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
struct Foo {
Foo(int i) {n=i;}
bool operator()(int a) {
return a > n;
}
private:
int n;
};
...
int n = 100;
Foo foo(n);
cout<< foo(99);
如果是引用捕获了变量,那么struct
内有一个指针成员持有被引用捕获的变量的地址。
比如:
set<int> ns = {100, 200, 300};
auto foo = [&ns](int a) {
return ns.find(a);
};
cout<< foo(99);
大致等价于:
struct Foo {
Foo(set<int>\* p) {p_ns = p;}
bool operator()(int a) {
auto &ns = \*p-ns;
return ns.find(a);
}
private:
set<int>\* p_ns;
};
...
set<int> ns = {100, 200, 300};
Foo foo(&ns);
cout<< foo(99);
然而……这并不是全部!
在没有捕获任何东西的时候,lambda
其实是等价于普通的函数的!可以用Linux C
中函数pthread_create()
来验证!它只能接收一个参数是void*
,返回值也是void*
的回调函数。
神奇的是,无参的lambda
也可以被pthread_create()
使用!
#include <iostream>
#include <pthread.h>
using namespace std;
struct A {
void\* operator()(void\*) {
cout<<"xxxx"<<endl;
return nullptr;
}
};
int main() {
A a;
a(NULL);
pthread_t t;
//pthread\_create(&t, NULL, a, NULL); // 编译失败
auto cb = [](void\*)->void\* {
cout<<"xxxx"<<endl;
return nullptr;
};
pthread\_create(&t, NULL, cb, NULL); // 编译通过
pthread\_join(t, NULL);
return 0;
}
上面代码还可以再改一下,让cb
去捕获一个变量,比如:
auto cb = [&](void\*)->void\* {
cout<<"xxxx"<<endl;
return nullptr;
};
pthread\_create(&t, NULL, cb, NULL);
**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/e755beeb6e71d6b90b4a92dad084fee3.png)
![img](https://img-blog.csdnimg.cn/img_convert/1d1569611d9081274a86afd3d9fb1458.png)
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**
**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
618679757)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**
**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**