我在哪里可以找到size_t的定义?

Eli*_*pos 115 c c++ variables

我看到用这种类型定义的变量,但我不知道它来自何处,也不知道它的目的是什么.为什么不使用int或unsigned int?(其他"类似"类型呢?Void_t等).

Mar*_*age 113

来自维基百科

stdlib.hstddef.h头文件定义了一个名为数据类型size_t1,其用于表示一个对象的大小.采用大小的库函数期望它们是类型size_t,并且sizeof运算符求值为size_t.

实际类型size_t取决于平台; 一个常见的错误是假定size_t是相同的无符号整型,其可以导致编程错误,2特别是作为64位体系结构变得更普遍.

C99 7.17.1/2

标准标头中定义了以下类型和宏 stddef.h

<剪断>

size_t

这是sizeof运算符的结果的无符号整数类型

  • 请参阅ISO C(99)标准(C++标准包括)第7.17和7.18.3节 (7认同)
  • @LokiAstari为什么不编辑答案,因为你知道它在标准中的位置? (3认同)
  • 例如,在Win64上,`int`和`unsigned int`类型是32位,而size_t是64位. (2认同)

fpm*_*phy 26

size_t 是sizeof运算符结果的无符号整数类型(ISO C99第7.17节).

sizeof操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.结果是整数.结果的值是实现定义的,其类型(无符号整数类型)是size_t(ISO C99 Section 6.5.3.4.)

  • 可惜你的答案并没有告诉我要包含哪个头文件. (57认同)

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)

  • 这正是我所需要的,这个答案应该被赞成。 (2认同)

Mat*_*ice 6

实际上,size_t代表您可以寻址的字节数。在过去 10 到 15 年的大多数现代架构中,它一直是 32 位,这也是 unsigned int 的大小。然而,我们正在转向 64 位寻址,而uint最有可能保持在 32 位(在 c++ 标准中不保证它的大小)。要使依赖于内存大小的代码跨体系结构可移植,您应该使用size_t. 例如,数组大小之类的东西应该始终使用size_t's。如果您查看标准容器,它::size()总是返回一个size_t.

另请注意,visual studio 有一个编译选项,可以检查这些类型的错误,称为“检测 64 位可移植性问题”。