1 typedef的用法
在C++中,typedef关键字用来定义类型的别名。
typedef double wages;
此时,wages是double的别名,可以将wages作为数据类型来定义其他变量。
wages mywage;
其中,mywage的类型是double。
2 使用typedef定义指针的别名
使用typedef定义指针的别名的方法与“1 typedef的用法”中提到的方法类似。
typedef int* pint;
int i = 1;
pint mypint = &i;
此时,mypint的类型是int的指针。
3 const来修饰typedef定义指针的别名
typedef int* pint;
const pint mycpint = 0;
其中,mycpint的类型是指向int的指针,mycpint本身是常量,所以需要对其赋初值。以下代码
const pint mycpint;
会有“mycpint需要初始值设定项”的错误提示。
而如下代码
mycpint = &i;
会有“表达式必须是可修改的左值”的错误提示。
从以上分析可以看出,
const pint mycpint = 0;
并不是简单地将pint替换成int*,即变成如下代码
const int* mycpint;
以上代码的含义是mycpint指向const int,其本身是并非是const,而是一个可以修改的变量。
4 typedef定义const int*
使用如下代码来定义const int*的别名
typedef const int *cpint;
cpint mycpint1;
mycpint1 = &i;
其中,mycpint1的类型是指向const int的指针,其本身并非const,因此可以不用赋初值,并且在随后的代码中可以将其赋值为int的指针&i。
与“3 const来修饰typedef定义指针的别名”中提到的别名区别在于
typedef const int *cpint;
可以看成
(const int) *cpint;
cpint首先是一个指针,该指针指向了一个const int。
const pint mycpint = 0;
可以看成
const (pint) mycpint = 0;
mycpint是一个const指针,该指针类型是pint,即指向char。