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...