每个 lambda 函数都是匿名类吗?

Is every lambda function an anonymous class?

本文关键字:lambda 函数 每个      更新时间:2023-10-16
auto a = [](){};
auto b = [](){};
vector<decltype(a)> v;
v.push_back(a); //ok
v.push_back(b); //compiler error

A 和 B 有不同的类型。

我想知道每个lambda函数是否真的是一种匿名类,每当我们创建一个lambda函数时,我们都会创建一个具有随机名称的新类,该名称仅对编译器可见?

是的,每个 lambda 都引入了自己独特的类型。

现在,同一个 lambda 可以通过几种方式有多个与其关联的闭包(lambda 实例)。 C++14 返回型扣除是最简单的:

auto nothing() {
  return []{};
}

将始终返回相同的类型,但不同的实例。 通过复制 lambda 闭包,或者通过将类型推断上下文中的 lambda 传递给模板函数并存储它,也可以完成类似的事情。