string::length returns 假值?
string::length returns false value?
string str = "abcdef";
cout << str.length() << endl; //6
cout << str.length() - 7 << endl; //4294967295
我不明白为什么 str.length() - 7 返回 4294967295 而不是 -1。
你能帮我解释一下吗?
str.length()
returns a size_t
,无符号。这个未签名的结果环绕,这就是为什么你得到 4294967295 而不是 -1.
str.length()
的return类型是size_t
:
size_t length() const noexcept;
对于这种情况,您可以将其视为 unsigned int
。
无符号整数在达到负值时下溢,绕回并走向另一个极端,导致你,在你的系统中看到4294967295。
4294967295 (2^32 - 1) 对应于 32 位无符号类型的最大值 - 这与少数 32 位实现一致。此外,size_t
可以是 32 位类型,但 不需要 。
string str = "abcdef";
cout << str.length() << endl; //6
cout << str.length() - 7 << endl; //4294967295
我不明白为什么 str.length() - 7 返回 4294967295 而不是 -1。
你能帮我解释一下吗?
str.length()
returns a size_t
,无符号。这个未签名的结果环绕,这就是为什么你得到 4294967295 而不是 -1.
str.length()
的return类型是size_t
:
size_t length() const noexcept;
对于这种情况,您可以将其视为 unsigned int
。
无符号整数在达到负值时下溢,绕回并走向另一个极端,导致你,在你的系统中看到4294967295。
4294967295 (2^32 - 1) 对应于 32 位无符号类型的最大值 - 这与少数 32 位实现一致。此外,size_t
可以是 32 位类型,但 不需要 。