为什么在C++中使用char数组而不是int数组
对于我正在开发的项目,我需要为bitset创建自己的实现。我看了一下STL库,看看他们如何处理这个问题,并在线查看其他一些内容。使用char数组似乎很标准。是否有所有人使用char数组而不是整数类型的原因?为什么在C++中使用char数组而不是int数组
很简单,因为在C++中char
是单字节,(或至少,它是由C++标准保证是小于或等于在尺寸上int
或short
),而一个int
的大小通常比一个较大字节。 (目前在大多数机器上通常是32位或4字节)。由于单字节是计算机可处理的最小可寻址数据单位,因此在处理单个位时使用数组是很自然的。例如,如果您使用的是int
,那么您将浪费任何数量不是sizeof(int)
倍数的位的重要空间,但是使用字节数组可以浪费最少的空间。
事实上,通过C++标准,char,signed char和unsigned char被**保证为一个字节。虽然有多少位是实现定义:) – 2010-11-13 19:59:16
当然,'字节'的定义并不总是8位。我曾经为8位PIC编写C,其中char是一个4位(字节),而int是8位(两个字节)。 – Tergiver 2010-11-13 20:02:31
@Tergiver:C显然不是你使用的语言,因为标准定义它们的方式,分别对于'char'和'int'类型来说,4和8位都不够。 – 2010-11-13 21:05:33
Char(通常)是微处理器可以处理的最小位单位。如果你正在创建一个可以使用任意位数的对象,那么使用最小单位的数组是有意义的。这样你总是可以使用最少的单位。
如果您需要非任意大小的位集,并且处理器具有足够大的本机类型以包含它,请使用N位类型。它将比数组更有效率。
我记得经常使用'unsigned char'。它相当于一个字节。 – Hogan 2010-11-13 19:55:10
出于好奇:为什么'std :: bitset'或'boost :: dynamic_bitset'不适合? – 2010-11-13 20:00:58
对于'std :: bitset',GCC和VC++似乎都使用'unsigned long'数组。 – UncleBens 2010-11-14 10:14:58