刚才意识到std::count_if
returns a signed value。
为什么这样设计?在我看来,它没有意义(结果只能是一个自然数,即非负整数),因为它不允许做一些简单的事情,比如将这个结果与容器的size()
进行比较而不得到警告或使用显式类型转换。
我真的认为返回类型应该有size_type
。
我错过了什么吗?
答案 0 :(得分:2)
我认为返回类型旨在与std::count
兼容,后者需要两个迭代器(想想指针)并返回两者之间的值(您可以将其视为两个指针的差异)。指针差异(在ptrdiff_t
中使用)必须是有符号值。
由于与std::count
的兼容性,您可以轻松地比较这两个函数的结果。
编辑:此处使用带符号值没有范围相关的缺点,因为该值至少在[0, std::count]
范围内,[0, end_ptr - start_ptr]
本身将在end_ptr - start_ptr
范围内。由于ptrdiff_t
被键入为{{1}}或类似,因此已签名。