2

可能重复:
C++ 中的谓词是什么?

当我阅读 C++ 入门时,有一个定义的术语是predicate

定义是这样的:

返回可转换为 bool 的类型的函数。通常由通用算法用来测试元素。库使用的谓词要么是一元的(采用一个参数),要么是二元的(采用两个)。

任何返回可以转换为 bool 的类型的人都可以是谓词!对?或者还有其他一些限制条件。

谢谢!

4

1 回答 1

3

在 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则将是一个可接受的谓词(尽管很奇怪)。

于 2012-11-27T02:05:35.783 回答