C11新特性之Lambda表达式

文章介绍了C++中的Lambda语法,包括其优点如简化函数定义,提高代码可读性。Lambda表达式的工作原理是编译器将其转化为匿名类的对象,实现函数调用。常见使用场景包括STL算法和多线程编程,文中也展示了如何将lambda作为函数参数的例子。
摘要由CSDN通过智能技术生成

一.lambda语法

优点: 

1.可以定义简短的函数。

2.使用lambda表达式使代码更紧凑,可读性更好。

语法:

  • []表示不捕获任何变量
  • [this]表示值传递方式捕捉当前的this指针 
  • [&]表示引用传递方式捕捉所有父作用域的变量(包括this
  • [&var]表示引用传递捕捉变量var
  • [=]表示值传递方式捕获所有父作用域的变量(包括this

注意:捕捉列表不允许变量重复传递

二.lambda表达式工作原理

编译器会把一个Lambda表达式生成一个匿名类的匿名对象,并在类中重载函数调用运算符,实现了一个operator()方法.

auto print = []{cout << "Hello World!" << endl; };

编译器会把上面的代码翻译为下面的代码: 

class print_class
{
public:
	void operator()(void) const
	{
		cout << "Hello World!" << endl;
	}
};
// 用构造的类创建对象,print此时就是一个函数对象
auto print = print_class();

三.lambda使用场景

lambda用于std模板库,例如sort,for_each,find_)if,remove_if,多线程场景

lambda作为函数的入参:

using FuncCallback = std::function<void(void)>;

void DataCallback(FuncCallback callback)
{
	std::cout << "Start FuncCallback!" << std::endl;
	callback();
	std::cout << "End FuncCallback!" << std::endl;
}

auto callback_handler = [&](){
	std::cout << "This is callback_handler";
};

DataCallback(callback_handler);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值