首先四種類型都是無符號類型,是用以表示元素個數或者數組索引的最佳類型。在作為函數參數時,不需像有符號類型那樣檢測值是否小于零。
1.
::size_t還是std::size_t
請使用std::size_t,因為你處于C++的世界。
在此,所有C++標準庫組件用以表示元素個數的類型(比如size()或者operator[])都是std::size_t。
std::size_t
count = array.size(); // array是typedef vector<int>
std::size_t index =
0;
array[ index ] = 0;
注意:
1)
如果某個CPP沒有使用任何C++標準庫組件,那么就有可能需要包含<cstddef> 頭文件。
2)
std::size_t其實就是::size_t (::size_t被引入到namespace std中(你可以在<cstring>中找到)
2.基本上我們不會考慮unsigned int和unsigned
long,因為處在C++的世界,使用C++標準庫組件就是在所難免了。
如果你非要了解其細枝末節的話,那么下面是一份清單:
unsigned int 和 unsigned
long比較(不考慮32位以下的平臺)
如果不考慮可移植性:
在32位平臺上更應該使用unsigned
int,因為它:
1)和unsigned long 一樣的大小,32位可以表示到42.9億。
2) 比unsigned long更常用
3)
和std::size_t是一樣的類型
如果是64位平臺的話:
1) unsinged int仍是32位,而unsigned
long就是64位了。
2) 更應該使用unsigned
long因為處理器對64位具有更快的處理速度。
就目前而言,64位平臺還不夠成熟,所以向64位平臺的移植基本不做考慮。
但是如果你堅持要考慮可移植性(注意是硬件32位平臺向64位移植,而非軟件):
1)
如果對速度敏感:使用unsigned long,無論在32位還是64位都有最快的處理速度。
2) 如果對內存敏感:使用unsigned
int,使用內存量不會因平臺而改變。
不過通常對于硬件平臺的可移植性的考慮都是多余的(不夠敏捷哦)。
3.
關于unsigned類型: