C 中的size t型別和容器中的size type型別有什麼區別?

時間 2021-05-11 22:41:49

1樓:

容器的size_type不一定是size_t,但標準保證二者都是unsigned integer型別,可以用std:: numeric_limits::max檢查範圍,如果範圍相等那可以直接用size_t,否則可以取最大值更小的那個型別確保安全。

這樣寫保證不會因為編譯器和標準庫實現的不同而出現問題。

2樓:王美麗

size_t是從C語言一路傳承下來的基礎資料型別,編譯器保證這種型別可以存放任何sizeof…的結果,多用於C庫中各種和記憶體大小有關的函式形參

C++中把size_t放到了命名空間std裡面

[container_type]::size_type是C++標準庫里定義的能夠存放[container_type]裡某種具有「大小」含義成員型別。舉例來說,容器的大小[container_type]::

size()、最大大小[container_type]::max_size(),std::vector的當前容量std::

vector::capacity(),返回值都是vector::size_type

這些型別背後定義的實現是平台相關的,編譯器和標準庫作者保證它們夠用(所以stl裡面通常(但不是必然)定義typedef size_type size_t;),而且每個容器類都可以定義自己獨特的size_type

只要不是僅僅為了某特定平台編寫程式,就不應該假設這些型別之間有任何定義關係

例如如果某庫某個容器保證其成員個數永遠不會超過65535,那麼其實現裡完全有可能是typedef unsigned short size_t;

3樓:

你的迴圈變數只需要能存下你的vector的長度,因此用size_type。

size_t和size_type是什麼型別取決於編譯器。都用size_t一般來說也沒什麼問題,因為在通常的實現裡這倆是同乙個型別。不過這畢竟不是被標準所保證,而且可能會造成程式的可讀性變差,因此不推薦這麼做。

C99標準中uintptr t和size t型別有什麼區別?

藍色 uintptr t是可以容納指標大小的integer type,但是size t不一定是,在一些具有分段定址機制的平台,size t可能比乙個指標的大小還小。Ref 1.std size t cppreference.comstd size tcan store the maximum siz...

怎樣解析出C原始檔中的變數的型別?

haoshu zhao 編譯一下就比較好得到了。Is there a way to print out the type of a variable pointer in C?這裡面提到的方法有 編譯之後用GDB看型別 用不正確的格式列印 printf d variable 然後編譯 gcc Wal...

C 在類中能定義本身型別的成員嗎?

番茄.go 至少有兩種情況是允許的。指標靜態成員變數 Member.cpp include classA AA a int main 執行 g Wall O2 o Member Member.cpp Member An object of class A.An object of class A.A...