在 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中文网其他相关文章!