關於: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 使用的時候頭文件需要 <cstddef> ;size_type 使用的時候需要<string>或者<vector>

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


免責聲明!

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



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