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

标签 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 函数时,我们都会创建一个具有随机名称的新类,该名称仅对编译器可见?

最佳答案

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

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

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

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

关于c++ - 每个 lambda 函数都是匿名类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955131/

相关文章:

c++ - 如何将 std::bind 作为通用引用类型传递?

c++ - 在不同的时间传递不同的参数

c++ - 如何将 lambda、函数对象或 std::function 作为模板参数传递并控制它们的参数

c++ - 是否在 C++ 11 的编译时或运行时自动推断类型?

c++ - 使用 std::sort 在 C++ 中对链表进行排序

c++ - 没有 union 的哈希码的内存地址

c++ - 如何使用调用纯虚拟成员的 std::function 初始化抽象类中的成员?

c++ - Imread & argv 图片位置?

c++ - 使用类似策略模式的文件解析器 - 如何获得结果?

c++ - 我如何实现可以传递vector和int *的函数?