C++中的谓词是什么?

What's the predicate in C++?

本文关键字:是什么 谓词 C++      更新时间:2023-10-16

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

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

定义是这样的:

返回可转换为 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将是一个可接受的谓词(尽管非常奇怪)。