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