C++ 具名要求:谓词 (Predicate)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

谓词 (Predicate) 要求描述了返回可布尔测试 (BooleanTestable) 值的可调用 (Callable) 类型。

谓词 (Predicate) 常与接收输入数据(单个对象/容器)和谓词的算法一起使用,它会针对输入数据进行调用以决定进一步的动作。C++ 标准库中的一些使用谓词的例子有:

  • std::all_ofstd::any_ofstd::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)
指定可调用类型为布尔谓词
(概念)