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為零或正數,則它是安全的。

 

 

 

這個輸出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM