通用 lambda 在 C++14 标准中如何工作( auto
关键字作为参数类型)?
它是基于 C++ 模板,其中为每个不同的参数类型编译器生成一个具有相同主体但替换类型的新函数(编译时多态性)还是更类似于 Java 的泛型(类型擦除)?
代码示例:
auto glambda = [](auto a) { return a; };
原文由 sasha.sochka 发布,翻译遵循 CC BY-SA 4.0 许可协议
通用 lambda 在 C++14 标准中如何工作( auto
关键字作为参数类型)?
它是基于 C++ 模板,其中为每个不同的参数类型编译器生成一个具有相同主体但替换类型的新函数(编译时多态性)还是更类似于 Java 的泛型(类型擦除)?
代码示例:
auto glambda = [](auto a) { return a; };
原文由 sasha.sochka 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
在
C++14
中引入了通用 lambda。简单地说,由 lambda 表达式定义的闭包类型将有一个 模板化 调用运算符,而不是
C++11
的 lambdas 的常规、非模板调用运算符(当然,当出现auto
在参数列表中至少出现一次)。所以你的例子:
将使
glambda
这种类型的实例:C++14 标准草案 n3690 的第 5.1.2⁄5 段指定了如何定义给定 lambda 表达式的闭包类型的调用运算符:
最后:
如上段所述,通用 lambda 只是具有模板化调用运算符的独特、未命名仿函数的语法糖。那应该回答你的问题:)