• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LOFLY
终其一生,编织快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

C++ 之lambda表达式

C++ 之lambda表达式

[capture](parameters) option -> return-type { body }

capture:捕获列表,可选
捕捉列表总是出现在 lambda 表达式的开始。实际上,是 lambda 引出符,编译器根据该引出符判断接下来的代码是否是 lambda 表达式。
捕捉列表能够捕获上下文中的变量,以在 lambda 表达式内使用,主要有如下几种情况:

# 不捕获任何变量
[]

# 按引用捕获外部作用域中所有变量,在 lambda 表达式内使用
[&]

# 按值捕获外部作用域中所有变量,在 lambda 表达式内使用
# 按值捕获的变量,在 lambda 表达式内是只读的,不能修改赋值
[=]

# 捕获外部作用域中所有变量,其中foo变量按引用捕获,其他的按值捕获
[=, &foo]

# 按值捕获bar变量,同时不捕获其他变量
[bar]

# 捕获当前类中的 this 指针
# 捕获了 this 就可以在 lambda 中使用当前类的成员变量和成员函数。
# 如果已经使用了 & 或者 =,就默认添加此选项。
[this]

parameters:参数列表,可选
option:函数选项,可选
return-type:返回值类型,可选。没有返回值的时候也可以连同符号一起省略
body:函数体

// 匿名函数的定义
	[]() {
		cout << "匿名函数" << endl;
	};

	// 匿名函数的调用
	[]() {
		cout << "匿名函数的调用" << endl;
	}();

	int a = 10;
	//[]() {  // 不捕获任何变量
	//	cout << a;
	//}(); 

	// 按引用捕获
	[&]() {
		cout << a++ << endl;
	}();
	cout << a << endl;

	// 按值捕获(只读, 不能修改)
	//[=]() {
	//	cout << a++ << endl; //报错
	//}();
	//cout << a << endl;

	// 按值捕获 (可修改,但属于按值传递, 不影响外部变量的值)
	[=]() mutable {
		cout << a++<<endl;    // 10
	}();
	cout << a << endl;;

	// 有参的匿名函数
	[](int x, int y) {
		cout << x << "+" << y << "=" << x + y << endl;
	}(1,2);


	// 匿名函数的返回值
	// 返回值可以省略  编译器会自动推断返回值的类型
	int sum = [](int x, int y) -> int{
		return x + y;
	}(1,2);
	cout << sum << endl;

	int sum1 = [](int x, int y)  {
		return x + y;
	}(3, 2);
	cout << sum1 << endl;
posted @ 2022-09-01 18:39  编织快乐  阅读(80)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3