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

问题描述 投票:7回答:1

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

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

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

我错过了什么吗?

c++ stl standard-library stl-algorithm
1个回答
2
投票

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

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

编辑:这里使用有符号值没有范围相关的缺点,因为该值至少在[0, end_ptr - start_ptr]范围内,end_ptr - start_ptr本身将在ptrdiff_t范围内。因为qazxswpoi被标记为qazxswpoi或类似,它已签名。

© www.soinside.com 2019 - 2024. All rights reserved.