越是簡單的問題越是容易忽略它存在的陷阱,在項目開發過程中,我們有時候會那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為零或正數,則它是安全的。
這個輸出