Namespaces
Variants

C++ named requirements: Predicate

From cppreference.net
C++ named requirements

谓词 要求描述了一个可调用对象,该对象返回一个 布尔可测试 值。

谓词 通常与接受输入数据(单个对象/容器)和谓词的算法配合使用,该谓词随后会在输入数据上被调用以决定后续操作。C++标准库中使用谓词的一些示例如下:

  • std::all_of , std::any_of , std::none_of 接受一个元素数组和一个谓词作为输入。对单个输入元素调用谓词,若所有/任一/没有元素使谓词返回 true,则相应返回 true。
  • std::find_if 接收元素序列和一个谓词。返回序列中第一个使谓词返回值为 true 的元素。

上文对算法设施的说明较为粗略,旨在以浅显方式解释 谓词 概念。如需详细信息,请参阅各独立页面。

换句话说,如果某个算法接受一个 谓词 pred 和一个迭代器 first ,该算法应当能够通过类似 if ( pred ( * first ) ) { /*...*/ } 的构造,使用给定谓词来测试由迭代器 first 指向的类型对象。

函数对象 pred 不应通过解引用迭代器应用任何非常量函数,且必须接受 const 参数,无论参数是 const 还是非常量,其行为都应保持一致。该函数对象可以是函数指针,也可以是具有适当函数调用运算符类型的对象。

要求

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时行为 正确行为
LWG 3031 C++98 const 值的要求不足 强化了要求

参见

(C++20)
规定可调用类型为布尔谓词
(概念)