如果我是正确的,那么常规函数和 lambda 之间的主要区别在于常规函数定义是一个语句,而 lambda 函数定义是一个表达式。据我了解,这带来了实际结果,例如能够在代码中编写 lambda 定义,这是 lambda 的主要用法(以及将 lambda 作为参数传递并作为结果返回)。
同时,我在代码构造的许多地方看到如下所示,其中 lambda 定义为
constexpr
,它创建了包含匿名函数的 constexpr 实体。这种语法的实际原因是什么(我的意思是,为什么人们广泛使用它)以及这种定义与它下面的函数的定义不同的例子是什么?
constexpr auto lambda = []() {
};
void function()
{
}
int main()
{
lambda();
function();
}
对于 lambda 的可组合性示例,这里是一个:
#include <iostream>
template<typename fn_t>
auto decorate(fn_t fn)
{
auto decorated_fn = [=] {
std::cout << "Some infrastructure before call\n";
try
{
fn();
}
catch(const std::exception& e)
{
std::cout << "call failed : " << e.what() << "\n";
return;
}
std::cout << "Some infrastructure after succesfull call\n";
};
return decorated_fn;
}
int main()
{
auto decorated_fn = decorate([] { std::cout << "actual call\n"; });
decorated_fn();
}