關於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比較的情況,這個時候就會出現很奇怪的結果

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