枚举提供了定义自己的数据类型的一种方式。typedef关键字允许把自己的数据类型名称指定为另一个类型的替代名称。在声明语句中使用typedef关键字,可以把类型名称BigOnes声明为标准类型long的等价名称:
typedef long BigOnes; //Defining BigOnes as a type name
当然,这并没有定义一个新类型,只是把BigOnes定义为long的替代类型指定符,因此,下面的语句可以把mynum变量声明为long类型:
BigOnes mynum = 0; //Declare & initialize a long int variable
这个声明跟使用标准的内置类型名称进行的声明没有区别,还可以使用下面的语句:
long int mynum = 0; //Declare & initialize a long int variable
其效果是相同的。实际上,如果声明自己的类型名称(例如BigOnes),就可以在同一个程序中使用这两个类型指定符来声明类型相同的不同变量。但是,很难判断这么做的原因。
因为typedef只是创建了已有类型的同义词,所以它显得有点多余。实际上并不完全如此。typedef的一个重要用途是为可能需要在多台计算机上运行的程序所使用的数据类型提供灵活性。本章在前面介绍过,标准库使用typedef定义了size_t类型,下面用一个实例来说明typedef的用法。
假定编写一个程序,它使用几个变量记录某类事件的个数,如记录在高速生产机器上每小时生产出来的巧克力棒数。这些数值通常需要使用4个字节的整数。
在一些计算机中,类型int占2个字节,不足以存储该程序中的整数。而在其他计算机上,类型int占4个字节,正好可以存储该程序中的整数。可以使用long类型来解决这个问题,long类型通常至少是4个字节,但在一些计算机上,它是8个字节,这样就太浪费了,特别是在程序存储大量的整数时,就更是如此。在程序中,可以声明自己的类型,从而提供处理这种情况的灵活性。例如:
typedef int Counter; //Define the integer type for the program
现在可以根据类型Counter来编写程序了,而不是使用标准类型int。如果要在int类型的取值范围不够的机器上编译这个程序,可以把Counter重新定义为:
typedef long Counter; //Define the integer type for the program
现在,程序中所有声明为Counter的整数都是long类型。
在学习了更多的预处理指令后,还可以做得更好。使用<climits>头文件中的信息,可以编写一个程序,根据每个整数类型的取值范围自动定义Counter类型。
typedef还可以简化更复杂的类型声明。稍后将介绍类提供的定义全新数据类型的方式,那时就可以完全控制应用于新类型的属性和操作。





