Lambda可以定义在函数中,类中
什么是lambda?
比如我们在main中创建一个auto函数(方括号代表我们是否需要往作用域里面传内容)
然后打印
int main() {
auto Hello = []() {
printf("Hello \n");
};
Hello();
return 0;
}
会输出Hello
那如果我们给他一个参数然后直接传呢
会发现有错误,当前是不能直接传的
因为这是一个指针,而我们的Hello是一个类似数组的东西
所以我们需要如下
int main() {
auto Hello = [](char *buff) {
printf("%s ~ \n",buff);
};
char buffer[1024] = "Hello";
Hello(buffer);
return 0;
}
如果我们让一个函数等于auto呢?不可行。
如果你需要在当前的Main中去写一个函数,那么你就需要lambda
这就是lambda作用,他就是可以在Main中调的函数
那么可不可以在Lambda中写Lambda呢?
答案是可以的,我们直接给Hello1打印就行了
auto Hello = [](char *buff) {
auto Hello1 = [](char* buff) {
printf("%s ~ \n", buff);
};
Hello1(buff);
};
当然这只是Lambda较为简单的应用
如果我们在外部写一个BufferC
然后我们想要用它又不想传参数怎么办?
直接把它扔到中括号中,我们就可以直接对其内容进行使用了
但是这里报错了
为什么呢?因为从中括号中传过去的内容,它会自动帮你补一个Const,也就是说其中的内容无法修改,而我们的参数是个Char,所以你需要给参数给加const;
char bufferC[1024] = "Hello fasfsafsafas \n";
auto Hello = [bufferC](const char *buff) {//const
auto Hello1 = [](const char* buff) {
printf("%s ~ \n", buff);
};
Hello1(buff);
Hello1(bufferC);
};
char buffer[1024] = "Hello";
Hello(buffer);
return 0;
如果觉得太麻烦了
可以直接往中括号中加一个取地址符&
它的意思是什么呢?意思是当前地址(Main)的所有东西你都可以用,甚至你把const去掉也行
char bufferC[1024] = "Hello fasfsafsafas \n";
char bufferC2[1024] = "Hello fasfsafsafas \n";
auto Hello = [&]( char *buff) {//const
auto Hello1 = []( char* buff) {
printf("%s ~ \n", buff);
};
Hello1(buff);
Hello1(bufferC2);
};
char buffer[1024] = "Hello";
Hello(buffer);
当前为函数中使用lambda