首页 > 后端开发 > C++ > C 14 泛型 Lambda 如何使用'auto”关键字实现类型灵活性?

C 14 泛型 Lambda 如何使用'auto”关键字实现类型灵活性?

Patricia Arquette
发布: 2024-12-16 16:36:17
原创
820 人浏览过

How Do C  14 Generic Lambdas Achieve Type Flexibility Using the `auto` Keyword?

理解 C 14 中 Auto 关键字的变体

在 C 14 中,泛型 lambda,一种带有 auto 关键字的 lambda 表达式参数类型,提供增强的灵活性。与具有非模板调用运算符的 C 11 lambda 相反,泛型 lambda 在其定义的闭包类型中具有模板化调用运算符。

例如,以下代码演示了泛型 lambda:

auto glambda = [](auto a) { return a; };
登录后复制

在这种情况下,glambda 的闭包类型将被定义为:

class /* unnamed */
{
public:
    template<typename T>
    T operator () (T a) const { return a; }
};
登录后复制

这意味着 glambda 是具有模板化调用运算符的唯一未命名仿函数的实例。 lambda 参数声明中每次出现的 auto 都对应于一个发明的类型模板参数,允许调用运算符处理不同类型的参数。

C 14 标准 (n3690) 指定闭包类型的调用运算符对于通用 lambda,它有一个模板参数列表,其中为 lambda 参数声明子句中的每个 auto 发明了一个类型模板参数。返回类型和函数参数源自 lambda 的尾随返回类型和参数声明子句,其中 auto 被相应发明的模板参数的名称替换。

总之,C 14 中的通用 lambda表示具有模板化调用运算符的唯一的、未命名的函子。这与基于 C 模板的多态性不同,在 C 模板中,编译器会为每个参数类型生成具有替换类型的新函数。它与 Java 的泛型更加一致,涉及编译期间的类型擦除。

以上是C 14 泛型 Lambda 如何使用'auto”关键字实现类型灵活性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板