c 小心 size t 的乙個陷阱

2021-05-22 10:17:42 字數 512 閱讀 4913

typedef unsigned int size_t;

size_t 其實是乙個無符號的int;

在對於陣列的迴圈中, 貌似很有用,  因為陣列的下標都是 0, 1, 2......, 不可能是負數.

下面是這個陷阱的示範:

int limit = -1;

for(size_t i=0; i < limit; ++i)

這段**裡面的迴圈體貌似不會被執行, 因為 0 > -1 , 實際是這樣嗎? no, 你只會看到螢幕中的數字拼命冒出!

原因就在於 i < limit 這裡, 這個limit 的型別已經不是int 了, 而是被隱式轉換為 unsigned int.

i < (unsigned int)limit,

看看 cout << (size_t)-1 << endl;

在我的電腦上是顯示 4294967295 .    哈哈, 示範中的迴圈次數太恐怖了!

如果用 size_t, limit 這類的變數最好做一下判斷, 或者用int.

Vue的乙個陷阱

最近做專案,上線前一直有個bug,不知道是什麼原因引起的,vm.set needverification true verification button prop disabled true verification button addclass verification disab needv...

while的乙個小陷阱

先看一段 示例 pragma warning disable 4996 include copy.h char mystrcpy char desc,const char src 為了讓 看起來更加的簡潔美觀,我一直喜歡這樣寫while,而且也沒出過什麼問題。但是這樣寫是否存在問題,看一下下面這個示...

關於C 中getline 函式的乙個陷阱

最近寫 的時候遇到乙個問題,就是getline函式接受標準輸入 鍵盤 時,失效了。請先看 include include include using namespace std int main 執行時沒問題的,先輸入乙個數字,再輸入你的名字,讓我們試試,結果如下 讀者可以自己動手試試,會發現還沒有...