发现一个魔鬼细节
s.size()
返回的是size_type
类型,标准库将size_type
定义为unsigned
的类型,在循环中会有0 + 0 - 1 < s.size()
即
-1 < s.size()
,-1
转化为unsigned
类型比s.size()
表示的数值要大,进入不了循环
废话少说,请看代码
#include <iostream>
using namespace std;
int main() {
string s = "123456";
int n = s.size();
cout << (-1 < n) << endl;
cout << (-1 < s.size()) << endl;
cout << (unsigned int)-1 << endl;
/* output:
1
0
4294967295
*/
return 0;
}
建议
-1 < (int)s.size()