如果 npos 为 -1,size_type怎么能成为无符号积分



如果std::stringstd::size_type是默认分配器的,

21.3.1 类模板basic_string
typedef typename allocator_traits<Allocator>::size_type size_type;

而默认分配器的std::size_typestd::size_t

20.9.9 默认分配器
typedef size_t size_type;

我们知道std::size_t始终是无符号整数类型,

C++标准
5.3.3 大小
大小和大小的结果...是类型 std::size_t 的常量。
[ 注意:std::size_t 在标准标头<cstddef>中定义

8.2 类型
内容与标准C库头<stddef.h>相同,但有以下变化:


C 标准
6.5.3.4 运算符
的大小和_Alignof 两个运算符的结果值都是实现定义的,
其类型(无符号整数类型(为 size_t ,定义于 <stddef.h>(和其他标头(。

std::basic_string::npos(定义为size_type(怎么可能是-1?

C++规范要求可以将有符号类型转换为无符号类型。 §4.7/2 指出

如果目标类型为无符号,则结果值是与源全等的最小无符号整数 整数(模 2n,其中 n 是用于表示无符号类型的位数(

这意味着 C++ 规范保证 -1 可以转换为 size_type,即使 size_type 是无符号的,并且结果将等于最大可能size_type因为将该数字加 1 需要返回 0。

该定义使用无符号整数遵循模算术的事实,并且-1转换为给定类型的最大无符号整数。

相关内容

  • 没有找到相关文章

最新更新