为什么 std::count_if 返回有符号的值而不是无符号的值

Why does std::count_if return signed value instead of unsigned?

本文关键字:无符号 符号 count std if 返回 为什么      更新时间:2023-10-16

刚刚意识到std::count_if返回一个有符号值。

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

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

我错过了什么吗?

我认为返回类型旨在与std::count兼容,它接受两个迭代器(想想指针)并返回两者之间的值(你可以认为是两个指针的差异)。指针差(如ptrdiff_t中使用的)必须是有符号值。

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

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