理解 C 14 中的泛型 Lambda
在 C 14 中引入,泛型 lambda 提供了一种编写可对任意值进行操作的 lambda 表达式的方法类型。然而,问题出现了:这个机制是如何发挥作用的?
通用 Lambda 的实现
与 C 11 中的常规 lambda 不同,通用 lambda 在其内部使用模板化调用运算符闭合类型。当 [auto](https://en.cppreference.com/w/cpp/keyword/auto) 关键字出现在参数列表中时,编译器会生成模板化调用运算符,而不是标准调用运算符。
示例:
auto glambda = [](auto a) { return a; };
此代码通过以下调用生成闭包类型运算符:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
标准定义
根据 C 14 标准草案 n3690 的第 5.1.2/5 段,泛型 lambda 闭包类型的调用运算符具有以下属性:
与 C 模板与 Java 泛型的相似性
泛型 lambda 与 C 模板类似,因为编译器会根据不同的参数类型生成独特的函数在模板参数上。但是,它们与 Java 泛型不同,后者在运行时利用类型擦除来在编译时维护类型信息。另一方面,泛型 lambda 可以创建具有显式类型的静态专用闭包。
以上是C 14 中的通用 Lambda 是如何工作的?的详细内容。更多信息请关注PHP中文网其他相关文章!