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

时间:2015-03-10 02:22:56

标签: c++ c++11

auto a = [](){};
auto b = [](){};
vector<decltype(a)> v;
v.push_back(a); //ok
v.push_back(b); //compiler error

a和b有不同的类型。

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

1 个答案:

答案 0 :(得分:10)

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

现在,同一个lambda可以通过几种方式将多个闭包(lambda实例)与之关联起来。 C ++ 14返回类型推导是最简单的:

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

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