string.length() 的类型
初学c++,写下这样一段代码
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int main() 6 { 7 string s = "qwertyui"; 8 // cout << typeid(s.length()).name() << endl; 9 10 for (int p = 0; p < 10; p++) 11 { 12 if (p - s.length() >= 0) 13 { 14 cout << p << " "; 15 } 16 } 17 cout << endl; 18 system("pause"); 19 return 0; 20 }
本意是想输出8 9,但是最后结果却是0 1 2 3 4 5 6 7 8 9
但是,代码12行改成
if (p >= s.length())
结果又是对的
懵逼了很长时间,最后断点调试才发现,string.length() 返回的是unsigned int型。一个小的int类型减去大的unsigned int类型,会自动进行类型转换。。。。。。。