size_t和size_type區別

爲了使自己的程序有很好的移植性,C++程序員應該儘量使用size_t和size_type,而不是int,unsigned。

在標準C/C++的語法中,只有int float char bool等基本的數據類型,至於size_t,或size_type都是以後的編程人員爲了方便記憶所定義的一些便於理解的由基本數據類型的變體類型。

size_t是爲了方便系統之間的移植而定義的,它是一個無符號整型,在32位系統上定義爲:unsigned int;在64位系統上定義爲unsigned long。size_t一般用來計數,sizeof操作符的結果類型是size_t,該類型保證能容納實現所建立的最大對象的字節大小。它的意義大致是“適用於內存中可容納的數據項目的個數的無符號整數類型”所以,它在數組下標和內存管理函數之類的地方廣泛使用。例如:typedef int size_t;定義了size_t爲整型。因爲size_t類型的數據其實是保存了一個整數,所以它也可以做加減乘除,也可以轉化爲int並賦值給int類型的變量。類似的還有wchar_t, ptrdiff_t等。

size_type是由string類類型和vector類類型定義的類型,用於保存任意string對象或vector對象的長度,標準庫類型將size_type定義爲unsigned類型。string::size_type它在不同的機器上,長度可以是不同的,並非固定的長度,但只要你使用了這個類型,就是的你的程序適這個機器,與實際機器匹配。

size_t和size_type的主要區別:

1. size_t是全局定義的類型;size_type是STL類中定義的類型屬性。在使用STL中表明容器長度的時候,我們一般用size_type。

2. string::size_type 類型一般就是unsigned int, 但是不同機器環境長度可能不同 win32 和win64上長度差別; size_t一般也是unsigned int

3. size_t 使用的時候頭文件需要 ;size_type 使用的時候需要或者

4. 下述長度均相等,長度爲 win32:4 win64:8

  sizeof(string::size_type)

 sizeof(vector<bool>::size_type)

 sizeof(vector<char>::size_type)

 sizeof(size_t)

5. 二者聯繫:在用下標訪問元素時,vector使用vector::size_type作爲下標類型(size_type是容器概念,沒有容器不能使用),而數組下標的正確類型則是size_t

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