为什么std :: count_if返回有符号值而不是unsigned?

时间:2015-03-10 08:30:55

标签: c++ stl standard-library stl-algorithm

刚才意识到std::count_if returns a signed value

为什么这样设计?在我看来,它没有意义(结果只能是一个自然数,即非负整数),因为它不允许做一些简单的事情,比如将这个结果与容器的size()进行比较而不得到警告或使用显式类型转换。

我真的认为返回类型应该有size_type

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

我认为返回类型旨在与std::count兼容,后者需要两个迭代器(想想指针)并返回两者之间的值(您可以将其视为两个指针的差异)。指针差异(在ptrdiff_t中使用)必须是有符号值。

由于与std::count的兼容性,您可以轻松地比较这两个函数的结果。

编辑:此处使用带符号值没有范围相关的缺点,因为该值至少在[0, std::count]范围内,[0, end_ptr - start_ptr]本身将在end_ptr - start_ptr范围内。由于ptrdiff_t被键入为{{1}}或类似,因此已签名。