首页  >  文章  >  后端开发  >  本地类最终可以用作 C 11 中 STL 算法的谓词吗?

本地类最终可以用作 C 11 中 STL 算法的谓词吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-21 05:04:39575浏览

Can Local Classes Finally Be Used as Predicates for STL Algorithms in C  11?

在 STL 算法中使用本地类:解开本地类型限制

在 C 编程领域,本地类长期以来一直被禁止作为STL 算法的谓词,提出了有关潜在限制及其的问题

C 98/03 标准明确禁止本地类型作为模板参数,包括本地类。标准第 14.3.1 条明确规定“本地类型 [...] 不得用作模板类型参数的模板参数。”

此限制背后的基本原理源于短暂的当地类型的性质。由于它们存在于有限的范围内,因此它们的破坏可能会意外发生,当用作 STL 算法的谓词时,可能会导致未定义的行为。

但是,随着 C 11 的出现,这一限制被取消。修订后的标准允许将本地类型用作模板参数,从而使本地类能够充当 STL 算法的谓词。

例如,考虑以下代码片段:

#include <algorithm>
#include <vector>

int main() {
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int> v(array, array + 10);

    struct even {
        bool operator()(int x) { return !(x % 2); }
    };
    std::remove_if(v.begin(), v.end(), even());
}

中在此代码中,本地类甚至定义了一个检查偶数的谓词。此类现在可以直接用作 std::remove_if 算法的参数,该算法从向量 v 中删除所有偶数。

虽然对本地类型的限制最初是为了防止潜在的未定义行为,它在 C 11 中的删除为在函数式编程场景中使用本地类开辟了新的可能性。

以上是本地类最终可以用作 C 11 中 STL 算法的谓词吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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