我是靠谱客的博主 爱撒娇羽毛,最近开发中收集的这篇文章主要介绍c++ lambda函数与函数中的类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天又学到个c++ 的 lambda 函数,又为匿名函数(就是没有名字的函数),此外c++函数里还可以定义类,呵呵

 lambda 大体结构是  [capture](parameters)->return-type{body}   

[ ]是指闭包,闭包是指在Lambda函数之外声明的变量,Lambda函数可以引用这些变量,这些变量的集合叫做闭包。在[ ]里面可以定义变量是按值或这引用来捕获。捕获的含义就是:按照什么类型来获取的变量。即使没有引用外部变量,也不能省略。

( )是指Lambda函数中用到的参数,这些参数是Lambda函数自己定义的局部变量。没有自定义的参数,可以省略。

return-type:是值Lambda函数运行完后,返回值的类型。如果没有返回值,可省略不写。

{body}:Lambda函数操作主体。

如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:

     [capture](parameters){body}

 

 

[]        //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y]   //x 按值捕获, y 按引用捕获.
[&]       //用到的任何外部变量都隐式按引用捕获
[=]       //用到的任何外部变量都隐式按值捕获
[&, x]    //x显式地按值捕获. 其它变量按引用捕获
[=, &z]   //z按引用捕获. 其它变量按值捕获

 

例子:

void SendTest() {
	Sleep(2000);
	for (uint32_t i = 0; i < 100000; i++) {
		std::string context{ std::to_string(i) };
	}

	class TT {  //c++ 中可以在函数中定义类。。。牛皮

	};
}




typedef enum
{
	add = 0,
	sub,
	mul,
	divi
}type;


int main()
{

	int a = 10;
	int b = 20;

	auto func = [=](type i)->int { //lambda 函数 如果 []中没=号,则不能使用a,b外部变量
		switch (i)
		{
		case add:
			return a + b;
		case sub:
			return a - b;
		case mul:
			return a * b;
		case divi:
			return a / b;
		}
	};


	std::cout << func(sub) << std::endl;

	auto add = [=](int a, int b)->int { //lambda
		return a + b;
	};

	std::cout << add(100, 101) << std::endl;

    auto z = [=] { int k = a * b; for (int i = 0; i < 100; ++i) {
		k += i;
	}
	return k; };

	std::cout << z() << std::endl;

	system("pause");
	return 0;
}

 

最后

以上就是爱撒娇羽毛为你收集整理的c++ lambda函数与函数中的类的全部内容,希望文章能够帮你解决c++ lambda函数与函数中的类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部