关于std::string的size()返回值类型是size_t的坑

先放结论: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比较的情况,这个时候就会出现很奇怪的结果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章