C++ 每个lambda函数都是匿名类吗? autoa=[](){}; 自动b=[](){}; 向量v; v、 推回(a)//好啊 v、 推回(b)//编译错误

C++ 每个lambda函数都是匿名类吗? autoa=[](){}; 自动b=[](){}; 向量v; v、 推回(a)//好啊 v、 推回(b)//编译错误,c++,c++11,C++,C++11,a和b有不同的类型 我想知道是否每个lambda函数实际上都是一种匿名类,每当我们创建一个lambda函数时,我们都会创建一个具有随机名称的新类,该名称仅对编译器可见?是的,每个lambda都会引入它自己独特的类型 现在,同一个lambda可以通过几种方式与多个闭包(lambda实例)关联。C++14返回类型推断是最简单的: auto a = [](){}; auto b = [](){}; vector<decltype(a)> v; v.push_back(a); //ok v.

a和b有不同的类型


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

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

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

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

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

Yes。每个lambda都引入了自己独特的匿名类型。没有像您这样的捕获的lambda可以转换为函数指针。这将允许您的示例代码使用向量类型
vector
编译。我想知道是否有任何方法可以从C++11中的函数返回本地lambda。我知道你可以通过返回一个
std::function
来实现这一点,但是你能做到上面在C++11中所做的吗?@vsoftco不,没有。您只能从C++11中声明lambda的位置传递lambda“up”:您可以将一个“in”和“out”传递给子函数,但函数的返回类型(在C++11中)是在解析其主体之前确定的(当然,lambdas主体除外)<代码>自动f=[]{return[](int x){return x+1};}是一个函数对象,其
操作符()
返回lambda。。。。或者在一个被多次调用的函数中使用lambda,或者在一个迭代多次的循环中使用lambda,这是通常的做法。@Chee我要同时使用两个实例,真的。我猜在不同的时间仍然有两个例子。
auto nothing() {
  return []{};
}