for循环s.length()-1,s为空时的一直执行循环的问题
以下代码输出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)
-

浙公网安备 33010602011771号