C++中string.length()返回类型是什么?为何直接运算会数值异常?
C++ string.length()相关问题解答
1. C++中string.length()的返回类型是什么?
std::string::length()的返回类型是**size_t**,这是C++标准定义的无符号整数类型,专门用于表示对象大小、容器元素数量这类非负数值,通常和unsigned long的内存大小一致,取值范围从0到SIZE_MAX(64位系统下一般为18446744073709551615)。
2. 为何不提前转换word.length()的类型时,会出现异常数值?
核心原因是有符号与无符号整数的隐式类型转换规则:
- 代码中
i是int类型(有符号整数),而word.length()返回的size_t是无符号整数。执行i - word.length()时,C++会将有符号的int隐式转换为无符号的size_t来参与运算。 - 以第一个输出为例,假设当前
word长度为5:0(int)被转为size_t类型的0,再减去size_t类型的5。由于无符号整数不允许负数,运算会触发无符号整数溢出回绕,结果等价于SIZE_MAX - 5 + 1,也就是你看到的18446744073709551611。 - 而将
word.length()赋值给int类型的word_len时,因为5、3这类小数值在int的取值范围内,转换合法,此时i - word_len是两个有符号整数的运算,自然输出正确的负数结果。
内容的提问来源于stack exchange,提问作者PokeLu
相关产品推荐
相关产品推荐

