为什么要区分通用算法的谓词和非谓词版本?

时间:2016-01-28 08:28:16

标签: c++ language-lawyer c++14 generic-programming c++-standard-library

标准库确实区分了通用算法的谓词和非谓词版本。例如,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{});

1 个答案:

答案 0 :(得分:8)

很多历史原因。

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

  

所以,假设我们只是重新设计整个事物,如果是第二种形式   首选?

这是current Ranges TS working draft的作用。