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