auto a = [](){};
auto b = [](){};
vector<decltype(a)> v;
v.push_back(a); //ok
v.push_back(b); //compiler error
a和b有不同的类型。
我想知道每个lambda函数是否真的是一种匿名类,每当我们创建一个lambda函数时,我们创建一个具有随机名称的新类,只对编译器可见?
答案 0 :(得分:10)
是的,每个lambda都会引入自己独特的类型。
现在,同一个lambda可以通过几种方式将多个闭包(lambda实例)与之关联起来。 C ++ 14返回类型推导是最简单的:
auto nothing() {
return []{};
}
将始终返回相同的类型,但不同的实例。类似的事情可以通过复制lambda闭包,或者通过将类型推导上下文中的lambda传递给模板函数并存储它来完成。