我有很多我的代碼是無符號數的常數,例如中計數器,截止頻率,長度等。我開始使用std::size_t
所有這些,而不是int
或unsigned int
。
這是正確的做法嗎?我開始它,因爲STL容器使用它的大小,它用於字符串位置等。
我有很多我的代碼是無符號數的常數,例如中計數器,截止頻率,長度等。我開始使用std::size_t
所有這些,而不是int
或unsigned int
。
這是正確的做法嗎?我開始它,因爲STL容器使用它的大小,它用於字符串位置等。
std::size_t
是用於計算內存位置的類型,如數組長度,對象的大小等。STL容器是使用container_type::size_type
,這將通常映射到std::size_t
,但不保證這樣做。
如果您需要持有不用於上述目的的非負積分的類型,unsigned short
,unsigned int
和unsigned long
有什麼問題?
可以將size_t用於表示存儲在內存中的對象大小的變量。但沒有太多理由將它用於其他任何事情。它的存在主要是因爲unsigned int可能不足以表示內存對象的大小。 (考慮一個具有16位整數但32位地址空間的體系結構)。
size_t實際上是一個在stddef.h中定義的typedef,它依賴於平臺,因此您無法對此做任何假設。在gcc 4.4(i486)上它被定義爲一個長整型unsigned int,除非操作系統已經定義了它,所以例如在i386機器上的Free BSD 5上它將是unsigned int,而在ia64機器上它將是一個無符號long。 因此,舉例來說,如果你試圖做類似
size_t i;
...
char buf[4];
sprintf(buf,"%u",i);
有時它會運行,但在某些平臺/編譯器中你會得到一個緩衝區溢出。
我的觀點是,如果您必須對size_t的大小/類型進行假設,這可能會導致一些討厭的可移植性問題。
這聽起來真的很有意思,爲什麼不用int去呢? – 2010-06-06 22:48:53
[何時使用std :: size_t?]的有效重複(http://stackoverflow.com/questions/1951519/when-to-use-stdsize-t) – 2010-06-06 22:50:58
請參閱:http://stackoverflow.com/questions/ 1951519 /時使用的-stdsize叔 – 2010-06-06 22:49:16