先放结论:size_t在一些64位系统上被定义为unsigned long,将size_t和负数做比较会得到错误的结果。
不废话,直接看一段代码
string str = "abcde";
int i = -1;
cout << (i < str.size() ? "true" : "false") << endl;
猜一下这段代码运行后会输出什么?没错,是false:
false
sizeof int和这个size_t看一下:
cout << sizeof(int) << endl;
cout << sizeof(size_t) << endl;
输出:
4
8
好吧,其实在我的系统上size_t是unsigned long
主要要注意的地方是这个unsigned,比如在KMP的C++实现中如果用了string的话,就会有负数和size_t比较的情况,这个时候就会出现很奇怪的结果