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