size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
例如:bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。
size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
例如:bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。
在C++中,设计 size_t 就是为了适应多个平台的 。size_t的引入增强了程序在不同平台上的可移植性。在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。
首先四种类型都是无符号类型,是用以表示元素个数或者数组索引的最佳类型。在作为函数参数时,不需像有符号类型那样检测值是否小于零。
1. ::size_t还是std::size_t 请使用std::size_t,因为你处于C++的世界。 在此,所有C++标准库组件用以表示元素个数的类型(比如size()或者operator[])都是std::size_t。 std::size_t count = array.size(); // array是typedef vector<int> std::size_t index = 0; array[ index ] = 0; 注意: 1. 如果某个CPP没有使用任何C++标准库组件,那么就有可能需要包含<cstddef> 头文件。 2. std::size_t其实就是::size_t (::size_t被引入到namespace std中(你可以在<cstring>中找到) 基本上我们不会考虑unsigned int和unsigned long,因为处在C++的世界,使用C++标准库组件就是在所难免了。 如果你非要了解其细枝末节的话,那么下面是一份清单: unsigned int 和 unsigned long比较(不考虑32位以下的平台) 如果不考虑可移植性: 在32位平台上更应该使用unsigned int,因为它: 1. 和unsigned long 一样的大小,32位可以表示到42.9亿。 2. 比unsigned long更常用 3. 和std::size_t是一样的类型 如果是64位平台的话: 1. unsinged int仍是32位,而unsigned long就是64位了。 2. 更应该使用unsigned long因为处理器对64位具有更快的处理速度。 就目前而言,64位平台还不够成熟,所以向64位平台的移植基本不做考虑。 但是如果你坚持要考虑可移植性(注意是硬件32位平台向64位移植,而非软件): 1. 如果对速度敏感:使用unsigned long,无论在32位还是64位都有最快的处理速度。 2. 如果对内存敏感:使用unsigned int,使用内存量不会因平台而改变。 不过通常对于硬件平台的可移植性的考虑都是多余的(不够敏捷哦)。 总结: 请在任何情况下使用std::size_t |
|
来自: just4peterpan > 《待分类》