标准库确实区分了通用算法的谓词和非谓词版本。例如,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{});
答案 0 :(得分:8)
很多历史原因。
C ++ 98/03没有函数模板的默认模板参数,所以它必须使用两个重载。之后更改它可能会破坏用户代码。
所以,假设我们只是重新设计整个事物,如果是第二种形式 首选?