如果我有一個int和一個爲size_t變量,我可以對它們進行比較,如:比較INT與爲size_t
int i=1;
size_t y=2;
if(i==y)
do something..
或我必須類型轉換其中之一嗎?
如果我有一個int和一個爲size_t變量,我可以對它們進行比較,如:比較INT與爲size_t
int i=1;
size_t y=2;
if(i==y)
do something..
或我必須類型轉換其中之一嗎?
如果int
爲零或爲正值,則安全。如果是負數,並且size_t
等於或高於int
,那麼int
將被轉換爲size_t
,因此其負值將變爲正值。然後將這個新的正值與size_t
的值相比較,這可能(以驚人的不太可能的巧合)給出誤報。要真正安全的(也許是怕事)檢查int
非負第一:
/* given int i; size_t s; */
if (i>=0 && i == s)
,並抑制編譯器警告:
if (i>=0 && (size_t)i == s)
size_t
將會是某種整數類型(儘管可能是未簽名的,所以可能會產生警告),所以適當的轉換應該自動完成。
正如其他人已經表示的那樣,如果計算所需的大小,您可能需要重新考慮產生int
的任何計算結果,看看您是否可以在size_t
中首先執行計算。
'size_t' *必須*無符號。 – 2010-09-04 11:32:18
實際上,無符號類型會產生比解決問題更多的問題(用於大小時)。一個更好的建議是儘快遠離未簽名的數量(轉換爲「int」)。你可以在INT_MAX值附近遇到問題,但是如果沒有簽名,你可以在零點附近出現問題,這在編程中更常見。 – 6502 2017-08-29 06:34:56
可以比較size_t
值與int
值,int
值將被隱式轉換爲unsigned
類型。
有些編譯器會在比較中混合使用signed
和unsigned
類型時發出警告。在這種情況下,您可以明確地將signed
值轉換爲合適的unsigned
類型以禁止警告。
只是掩蓋這樣的編譯器警告,國際海事組織通常不是一個好主意。有更好的選擇(例如,首先使用'size_t'或'int'之一而不是兩者)。 – strager 2010-09-04 11:27:01
你真的需要一個'int'比作'的size_t '?通常你不應該這樣做,而且你可能會錯誤地將int轉換爲size_t或反之亦然。 – GameZelda 2010-09-04 11:19:47
只是爲了知識:) – 2010-09-04 13:25:35