C++第三章 Lambda技巧

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值