[英]Why can't size_t be directly compared with negative int?
我的程序中的一個錯誤是直接將size_t
與int
進行比較。
玩具示例代碼如下:
string s = "AB";
cout << (-1 < 8888888+(int)s.size()) << endl;
cout << (-1 < 8888888+s.size()) << endl;
輸出是:
1
0
那么為什么size_t不能直接與負int進行比較呢?
size_t是無符號的,因此只能表示正數。 將其與否定比較將產生古怪的結果。
如果你嘗試將int(-1)轉換為size_t,你會發現它變成了一個巨大的數字,這解釋了你所擁有的行為。
因為size_t
是無符號的並且int
是有符號的。 語言對這種“混合”比較以及“混合”算術有特殊規則。 在這種情況下,這些規則說一切都應該轉換為size_t
。 轉換為size_t
(無符號)會極大地扭曲int
的原始值( -1
變為SIZE_MAX
),這是導致第二種情況下“奇怪”結果的原因。
在第一種情況下,您強制將size_t
轉換為int
,從而將您的比較轉換為int
與int
之一。 它表現得很好。
注意,順便說一句, std::string::size()
返回std::string::size_type
,這是一個無符號類型,但不一定是size_t
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.