为什么 std::count_if 返回有符号的值而不是无符号的值
Why does std::count_if return signed value instead of unsigned?
刚刚意识到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
或类似,因此已签名。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 未定义的符号:符号引用错误.没有输出写入主
- 符号"符号"的偏移不一致
- 未定义的符号 - 符号查找错误