C++ 具名要求:谓词 (Predicate)
来自cppreference.com
谓词 (Predicate) 要求描述了返回可布尔测试 (BooleanTestable) 值的可调用 (Callable) 类型。
谓词 (Predicate) 常与接收输入数据(单个对象/容器)和谓词的算法一起使用,它会针对输入数据进行调用以决定进一步的动作。C++ 标准库中的一些使用谓词的例子有:
- std::all_of、std::any_of、std::none_of 接收一组元素和一个谓词为其输入。在每个输入元素上调用谓词,并且当谓词分别对全部/任一/无元素返回 true 时返回 true。
- std::find_if 接受元素的序列和一个谓词。返回序列中首个谓词对其返回 true 的元素。
上面给出的算法设施描述是简陋的,并且有意地简要解释谓词 (Predicate) 。对于详细信息可查阅各自的页面。
换言之,若算法接收一个谓词 (Predicate) pred
和一个迭代器 first
,则它应该有能力经由类似 if(pred(*first)) { /*...*/ } 的语言构造,对迭代器 first
所指向类型的对象进行测试。
函数对象 pred
不应当通过解引用的迭代器运用任何非 const 函数,且必须接受一个 const
实参,无论实参是 const
还是非 const
都具有相同的行为。此函数对象可以是函数指针,或者拥有适合的函数调用运算符的类型的对象。
要求
本节未完成 原因:更好地描述实际要求 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3031 | C++98 | const 值上的要求不充分 | 加强要求 |
参阅
(C++20) |
指定可调用类型为布尔谓词 (概念) |