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號