簡體   English   中英

為什么size_t不能直接與負int進行比較?

[英]Why can't size_t be directly compared with negative int?

我的程序中的一個錯誤是直接將size_tint進行比較。

玩具示例代碼如下:

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 ,從而將您的比較轉換為intint之一。 它表現得很好。

注意,順便說一句, std::string::size()返回std::string::size_type ,這是一個無符號類型,但不一定是size_t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM