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 }

 

 

 

  1. s.length() 返回的是 size_t 类型(无符号整数)

  2. s 是空字符串,所以 s.length() 等于 0

  3. s.length() - 1 计算时发生无符号整数下溢

    • 0 - 1 在有符号整数中是 -1

    • 但在无符号整数中,0 - 1 会变成最大值(通常是 18446744073709551615

posted @ 2025-10-09 16:24  congmingyige  阅读(3)  评论(0)    收藏  举报