string :: length返回false值?

Jav*_*ava 1 c++ string string-length

string str = "abcdef";
cout << str.length() << endl; //6
cout << str.length() - 7 << endl; //4294967295
Run Code Online (Sandbox Code Playgroud)

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

你能帮我解释一下吗?

Cub*_*ber 8

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


gsa*_*ras 6

返回类型str.length()size_t:

size_t length()const noexcept;

你可以把它想象成unsigned int这种情况.

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

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