string :: length返回false值?

时间:2017-09-10 04:35:46

标签: c++ string string-length

string str = "abcdef";
cout << str.length() << endl; //6
cout << str.length() - 7 << endl; //4294967295

我不明白为什么str.length() - 7返回4294967295而不是-1。

你能帮我解释一下吗?

2 个答案:

答案 0 :(得分:8)

str.length()会返回size_t,这是未签名的。这个无符号结果包裹起来,这就是为什么你得到4294967295而不是-1。

答案 1 :(得分:6)

str.length()的返回类型为size_t

  

size_t length()const noexcept;

对于这种情况,您可以将其视为unsigned int

无符号整数在达到负值时会下溢,包围并转到其他极端,导致,在系统4294967295中看到。

4294967295(2 ^ 32 - 1)对应于32位无符号类型的最大值 - 这与少数32位实现一致。此外size_t可以是,但必须是32位类型。