我看到用这种类型定义的变量,但我不知道它来自何处,也不知道它的目的是什么.为什么不使用int或unsigned int?(其他"类似"类型呢?Void_t等).
Mar*_*age 113
来自维基百科
的
stdlib.h和stddef.h头文件定义了一个名为数据类型size_t1,其用于表示一个对象的大小.采用大小的库函数期望它们是类型size_t,并且sizeof运算符求值为size_t.实际类型
size_t取决于平台; 一个常见的错误是假定size_t是相同的无符号整型,其可以导致编程错误,2特别是作为64位体系结构变得更普遍.
标准标头中定义了以下类型和宏
stddef.h<剪断>
size_t这是sizeof运算符的结果的无符号整数类型
fpm*_*phy 26
size_t 是sizeof运算符结果的无符号整数类型(ISO C99第7.17节).
的sizeof操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.结果是整数.结果的值是实现定义的,其类型(无符号整数类型)是size_t(ISO C99 Section 6.5.3.4.)
ste*_*anB 24
根据en.cppreference.com 上的size_t描述,size_t在以下标题中定义:
std::size_t
...
Defined in header <cstddef>
Defined in header <cstdio>
Defined in header <cstring>
Defined in header <ctime>
Defined in header <cwchar>
Run Code Online (Sandbox Code Playgroud)
实际上,size_t代表您可以寻址的字节数。在过去 10 到 15 年的大多数现代架构中,它一直是 32 位,这也是 unsigned int 的大小。然而,我们正在转向 64 位寻址,而uint最有可能保持在 32 位(在 c++ 标准中不保证它的大小)。要使依赖于内存大小的代码跨体系结构可移植,您应该使用size_t. 例如,数组大小之类的东西应该始终使用size_t's。如果您查看标准容器,它::size()总是返回一个size_t.
另请注意,visual studio 有一个编译选项,可以检查这些类型的错误,称为“检测 64 位可移植性问题”。