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 传递给模板函数并存储它来完成。
关于c++ - 每个 lambda 函数都是匿名类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955131/