C++將int與size_t進行比較的陷阱

越是簡單的問題越是容易忽略它存在的陷阱,在項目開發過程中,我們有時候會那int和size_t作比較,如果只是簡單的比較,你就錯了。

首先簡單介紹一下size_t:

size_t是一些C/C++標準在stddef.h中定義的。這個類型足以用來表示對象的大小。size_t的真實類型與操作系統有關。

在32程序中被普遍定義爲:

typedef   unsigned int size_t;

 

而在64位程序中被定義爲:

typedef  unsigned long  long size_t;

 

比如我們做一個實驗:

int i=-9;
size_t u=2;
if(u < i)
{
printf("i > u");
}
else
{
printf("i<u");
}
是不是第一眼認爲輸出 i < u,是不是不理解,這是因爲int它是負數,size_t與int相等或更高,則int將被轉換爲size_t,因此其負值將變爲一個很大的正值。然後將這個新的正值與size_t值進行比較,這時候就大於size_t了,
如果int爲零或正數,則它是安全的。

 

 

 

這個輸出

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