size type 和 size t 的區別

2021-06-07 00:47:05 字數 1714 閱讀 5398

string st("the expense of spirit\n");

cout << "the size of "<

那麼size()

這個函式返回的型別? 一定要記住,絕對不是整形,而是

size_type

型別的,所以千萬不要把

size

的返回值賦給乙個

int變數。 那麼

size_type

到底是一種什麼樣的型別呢?

string

類型別和許多其他庫型別都定義了一些配套型別

companion type)。

通過這些配套型別,庫型別的使用就能與機器無關

size_type

就是這些配套型別中的一種。

size_type

被定義為與

unsigned

型(unsigned int, unsigned long

)具有相同的含義,而且可以保證足夠大能夠儲存任意

string

物件的長度。為而來使用由

string

型別定義的

size_type

型別。程式設計師必須加上作用於操作符來說明所使用的

size_type

型別是由

string

類定義的。

我們為什麼不適用int變數來儲存string的size呢?

使用int

變數的問題是:有些機器上的

int變數的表示範圍太小,甚至無法儲存實際並不長的

string

物件。如在有16位

int型的機器上,

int型別變數最大只能表示

32767

個字元的

string

物件。而能容納乙個檔案內容的

string

物件輕易就能超過這個數字,因此,為了避免溢位,儲存乙個

string

物件的size

的最安全的方法就是使用標準庫型別

string

::size_type().

一點注意:

雖然是在學習標準庫

string

的時候巧遇了

size_type

型別,但是,其實

vector

庫也可以定義

size_type

型別,在

vector

庫中還有乙個

difference_type

型別,該型別用來儲存任何兩個迭代器物件間的距離,所以是

signed

型別的。

什麼是size_t型別呢?其實本質上和size_type沒有多大區別

其實size_t

和size_type

類似,size_t

型別定義在

cstddef

標頭檔案中

,該檔案是

c標準庫的標頭檔案

stddef.h

的c++版本.

它是乙個與機器相關的

unsigned型別,

其大小足以保證儲存記憶體中物件的大小。用法如下:

bitset<32> bitvec;

size_t sz=bitvec.size(); 另外

sizeof

操作符的返回值的型別也為

size_t

**:

size t 與size type的使用

size t 是為了方便系統之間的移植而定義的 在32位系統上 定義為 unsigned int 在64位系統上 定義為 unsigned long 更準確地說法是 在 32位系統上是32位無符號整形 在 64位系統上是64位無符號整形 2.size t是無符號整形,平常用的時候沒有覺得有什麼問題,...

c 中size type和size t的關係

size type 由string類型別和vector類型別定義的型別,用以儲存任意string物件或vector物件的長度,標準庫型別將size type定義為unsigned型別 string抽象意義是字串,size 的抽象意義是字串的尺寸,string size type抽象意義是尺寸單位型別...

C 中size t 和 size type的區別

為了使自己的程式有很好的移植性,c 程式設計師應該盡量使用size t和size type而不是int,unsigned 1.size t是全域性定義的型別 size type是stl類中定義的型別屬性,用以儲存任意string和vector類物件的長度 2.string size type 制型別...