如果std::size_type
的{{1}}是默认分配器的std::string
,
21.3.1班级模板basic_string
typedef typename allocator_traits<Allocator>::size_type size_type;
默认分配器的std::size_type
是std::size_t
,
typedef size_t size_type;
20.9.9默认分配器
std::size_t
我们知道std::size_t
始终是无符号整数类型
C ++标准
中定义
5.3.3尺寸
sizeof和sizeof ...的结果是<cstddef>
类型的常量 [注意:std :: size_t在标准标题<stddef.h>
8.2类型
内容与标准C库标题size_t
相同,但有以下更改:
C标准
6.5.3.4 sizeof和_Alignof运算符
两个运算符的结果值是实现定义的,
它的类型(无符号整数类型)是<stddef.h>
,定义于size_type
(以及其他标题)。
std::basic_string::npos(定义为JsonConvert.DefaultSettings = () =>
{
return new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
};
};
)如何为-1?
答案 0 :(得分:4)
C ++规范要求签名类型可以转换为无符号类型。 §4.7/ 2表明
如果目标类型是无符号的,则结果值是与源一致的最小无符号整数 整数(modulo 2 n ,其中n是用于表示无符号类型的位数)
这意味着即使productTabs
是无符号的,C ++规范也保证-1可以转换为size_type
,结果将等于最大可能size_type
因为添加1到那个数字需要回馈0。
答案 1 :(得分:2)
该定义使用无符号整数遵循模运算的事实,-1
转换为给定类型的最大无符号整数。