为什么要区分泛型算法的谓词和非谓词版本

Why differentiate predicate and non-predicate versions for generic algorithms?

本文关键字:谓词 版本 算法 泛型 为什么      更新时间:2023-10-16

标准库确实区分了通用算法的谓词和非谓词版本。例如,std::sort()如下所示:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

只写以下内容有什么问题吗?

template< class RandomIt, class Compare = std::less<void>>
void sort( RandomIt first, RandomIt last, Compare comp = Compare{});

几乎是历史原因。

C++98/03 没有函数模板的默认模板参数,因此它必须使用两个重载。之后更改它可能会破坏用户代码。

所以,假设我们只是重新设计整个事情,应该是第二种形式 是首选?

这就是当前的RangesTS工作草案所做的。