c++ 小心 size_t 的一個陷阱

來源:互聯網
上載者:User

typedef unsigned int size_t;

 

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

 

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

 

下面是這個陷阱的示範:

 

    int limit = -1;

 

    for(size_t i=0; i < limit; ++i){
               cout << i << endl;
    }

 

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

 

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

 

i < (unsigned int)limit,

 

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

 

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

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.