我看到了用这种类型定义的变量,但我不知道它来自哪里,也不知道它的目的是什么。为什么不使用int或unsigned int?(其他“相似”类型呢?Void_t等)。
我看到了用这种类型定义的变量,但我不知道它来自哪里,也不知道它的目的是什么。为什么不使用int或unsigned int?(其他“相似”类型呢?Void_t等)。
Answers:
来自维基百科
的
stdlib.h
和stddef.h
头文件定义了一个名为数据类型size_t
1,其用于表示一个对象的大小。接受大小的库函数希望它们是typesize_t
,并且sizeof运算符的计算结果为size_t
。的实际类型
size_t
取决于平台;一个常见的错误是假定size_t
它与unsigned int相同,这可能会导致编程错误2,特别是在64位体系结构变得更加普遍的情况下。
标准标头中定义了以下类型和宏
stddef.h
<snip>
size_t
这是sizeof运算符结果的无符号整数类型
int
和unsigned int
类型是32位,而为size_t为64位。
根据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>
size_t
是sizeof运算符结果的无符号整数类型(ISO C99第7.17节)。
的sizeof
操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称。大小由操作数的类型确定。结果是一个整数。结果的值由实现定义,其类型(无符号整数类型)为size_t
(ISO C99第6.5.3.4节)。
这样,您就始终知道大小是多少,因为特定类型专用于大小。自己的问题表明这可能是一个问题:是一个int
还是一个unsigned int
?另外,幅度(short
,int
,long
等)?
因为分配了特定的类型,所以您不必担心长度或签名。
实际的定义可以在C ++参考库中找到,它说:
类型:
size_t
无符号整数类型)标头:
<cstring>
size_t
对应于语言运算符返回的整数数据类型,sizeof
并在<cstring>
头文件(以及其他文件)中为无符号整数类型。在
<cstring>
,它被用作参数的类型num
中的函数memchr
,memcmp
,memcpy
,memmove
,memset
,strncat
,strncmp
,strncpy
和strxfrm
,其中在所有情况下它是用来指定字节或字符的功能有可能影响的最大数目。它也可以用来作为返回类型为
strcspn
,strlen
,strspn
和strxfrm
对返回的尺寸和长度。
void_t
除了通过Google搜索(我在AT&T Research的Kiem-Phong Vo 的图书馆中使用过该搜索结果),我对此并不熟悉。vmalloc
-我敢肯定,这在其他库中使用也一样)。
各种xxx_t typedef用于从特定的确定实现中抽象一个类型,因为用于某些事物的具体类型可能因平台而异。例如:
Void_t
抽象化由vmalloc
库例程返回的指针的类型,因为它被编写为在ANSI / ISO C之前的系统中工作,而该void
关键字可能不存在。至少那是我的猜测。wchar_t
抽象用于宽字符的类型,因为在某些系统上它将是16位类型,在其他系统上将是32位类型。因此,如果您编写宽字符处理代码以使用wchar_t
类型而不是使用该类型unsigned short
,则该代码可能更适合于各种平台。