1 關於size_t定義
size_t是一種數據相關的無符號類型,它被設計得足夠大以便能夠內存中任意對象的大小。在cstddef頭文件中定義了size_t類型,這個文件是C標准庫stddef.h頭文件的C++版本。
在需要通過數組下標來訪問數組時,通常建議將下標定義size_t類型,因為一般來說在進行下標訪問時,下標都是正的。當然,也不是所有的下標訪問操作下標都是正的,比如以下代碼:
int a[10]={1,2,3,4,5,6,7,8,9,10}; int * ptr =&(a[4]); cout<<ptr[-2]<<endl;
這段代碼中對ptr進行了下標訪問,並且下標是負的,但是這個訪問並不是錯誤的,執行的結果是輸出3。
2 在Visual Studio2012中查看size_t 的定義
在VS中,選中size_t,右鍵調出菜單,選擇“轉到定義”,會自動跳轉到size_t的定義位置。在我的機子上,跳到了的文件目錄:d:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\crtdefs.h。(這里為什么跳到了crtdef.h這個頭文件而不是上面說的cstddef頭文件?)
來看看在windows下是如何定義這個size_t的:
#ifndef _SIZE_T_DEFINED #ifdef _WIN64 typedef unsigned __int64 size_t; #else typedef _W64 unsigned int size_t; #endif #define _SIZE_T_DEFINED #endif
如上所示,size_t的定義是和系統相關的。
3 size_t作用
顯然,size_t的取值與機器相關,某些情況下正確的使用size_t可以提高程序的可移植性和有效性。
4 一篇關於size_t的博客:why size_t matters