首页 >后端开发 >C++ >为什么局部类不能用作 STL 算法中的谓词 (C 98/03)?

为什么局部类不能用作 STL 算法中的谓词 (C 98/03)?

DDD
DDD原创
2024-11-22 10:16:10725浏览

Why Can't Local Classes Be Used as Predicates in STL Algorithms (C  98/03)?

STL 算法中局部类的谜团

尽管 lambda 表达式在 STL 算法中被广泛用作谓词,但局部类似乎很神秘排除在该实用程序之外。在这个问题中,我们试图解开标准规定的限制,即禁止本地类型作为谓词参与 STL 算法。

标准的禁止

本地类型的缺失类作为 STL 算法中的谓词类型源于 C 98/03 标准所施加的明确禁止,如 C 03 文章中所述14.3.1:

“本地类型、没有链接的类型、未命名类型或由任何这些类型复合的类型不得用作模板类型参数的模板参数。”

此限制体现在编译器标记代码(如提供的示例)中,其中本地结构甚至不能用作谓词std::remove_if.

限制的理由

这种排除的理由笼罩在猜测之中。一些人推测这是一个疏忽,而另一些人则认为这是为了防止算法中临时的和可能令人困惑的类型定义。

C 11 中的演变

幸运的是, C 11 标准纠正了这个问题,取消了对本地类型作为模板参数的限制。因此,当代编译器通常允许在 STL 算法中使用本地类作为谓词。

结论

虽然最初禁止本地类令人沮丧,但它C 11 中的删除为在 STL 算法中利用本地类型开辟了新途径。如今,lambda 表达式和本地类作为有效的谓词选项共存,为开发人员提供了用于算法操作的多功能工具。

以上是为什么局部类不能用作 STL 算法中的谓词 (C 98/03)?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn