size_t 是什么
size_t 是作为sizeof运算符的返回值
它并不是一个新类型,其实是由typedef来实现的。 size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关(unsigned int
和unsigned long
的区别在于是32位机还是64位机,对于32位机size_t
占4个字节,而对于64位机size_t
占8个字节。)。typedef double aaa;是对double类型声明了新别名叫做aaa;size_t也是一样,typedef unsigned int size_t(32位);或typedef unsigned long(64位)表明对unsigned int或unsigned long起了一个叫size_t的别名;在打印size_t的时候,用%u或%lu来打印。
为什么要有size_t类型?
在C++中,设计 size_t 就是为了适应多个平台的 。size_t的引入增强了程序在不同平台上的可移植性。size_t是针对系统定制的一种数据类型,一般是整型,因为C/C++标准只定义一最低的位数,而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定义这样的数据类型。一般这种类型都会定义到它具体占几位内存等。
例如:在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。
size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。
它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
例如:我们常用的sizeof()操作的返回值就是 size_t类型的
例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。
vector使用的下标实际也是size_t,源码是typedef size_t size_type。
因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。