以下代码输出test2,如果没有break,会一直运行
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() { 5 int i; 6 string s = ""; 7 int len = s.length() - 1; 8 for (i = 0; i < len; i++) { 9 cout << "test0" << endl; 10 break; 11 } 12 13 for (i = 0; i < s.length(); i++) { 14 cout << "test1" << endl; 15 break; 16 } 17 18 for (i = 0; i < s.length() - 1; i++) { 19 cout << "test2" << endl; 20 break; 21 } 22 return 0; 23 }
-
s.length()
返回的是size_t
类型(无符号整数) -
s
是空字符串,所以s.length()
等于0
-
s.length() - 1
计算时发生无符号整数下溢:-
0 - 1
在有符号整数中是-1
-
但在无符号整数中,
0 - 1
会变成最大值(通常是18446744073709551615
)
-