可能重复:
C++ 中的谓词是什么?
当我阅读 C++ 入门时,有一个定义的术语是predicate。
定义是这样的:
返回可转换为 bool 的类型的函数。通常由通用算法用来测试元素。库使用的谓词要么是一元的(采用一个参数),要么是二元的(采用两个)。
任何返回可以转换为 bool 的类型的人都可以是谓词!对?或者还有其他一些限制条件。
谢谢!
可能重复:
C++ 中的谓词是什么?
当我阅读 C++ 入门时,有一个定义的术语是predicate。
定义是这样的:
返回可转换为 bool 的类型的函数。通常由通用算法用来测试元素。库使用的谓词要么是一元的(采用一个参数),要么是二元的(采用两个)。
任何返回可以转换为 bool 的类型的人都可以是谓词!对?或者还有其他一些限制条件。
谢谢!
在 C++ 的上下文中没有正式的谓词定义(无论如何我都知道),但它通常意味着可以在真/假上下文中使用的函数。
这是 cppreference 中count_if的一个可能实现,它说明了它在说什么:
template<class InputIt, class UnaryPredicate>
typename iterator_traits<InputIt>::difference_type
count_if(InputIt first, InputIt last, UnaryPredicate p)
{
typename iterator_traits<InputIt>::difference_type ret = 0;
for (; first != last; ++first) {
if (p(*first)) {
ret++;
}
}
return ret;
}
p
必须返回可以在if
语句中使用的东西,这基本上可以归结为。
例如:
class T {};
T f(int x)
{
return T();
}
这不是 count_if 的有效谓词,因为 T 不能隐式转换为布尔值。
换句话说:
if (f(4)) { }
是不可编译的代码。
但是,如果 T 可以隐式转换为布尔值,f
则将是一个可接受的谓词(尽管很奇怪)。