有两种方法可以定义类型别名。传统方法是使用关键字typedef,另一种使用别名声明来定义类型别名。
typedef
关键词typedef作为声明语句中的基本数据类型的一部分出现,含有typedef的声明语句定义的不是变量而是类型别名。如:
typedef double wages; //wages与double同义
typedef wages base, *p; //base与double同义,p与double*同义
类型别名与类型的名字等价,只要类型可以出现的地方,就可以使用类型别名。如:
wages hourly, weekly; //声明了两个double类型的变量
别名声明
使用using作为别名声明的开始,其后紧跟别名和等号,作用为将类型左侧的名字规定为等号右侧类型的别名。如:
using double = wages;
wages hourly, weekly;
指针、常量和类型别名
如:
typedef char *pstring;
const pstring cstr = 0; //cstr是指向char的常量指针(顶层)
const pstring *ps; //ps是一个指针,所指的对象是指向char的常量指针
pstring实际上就是指向char的指针,const pstring就是指向char的常量指针,而非指向常量字符的指针。并不可以用char *直接代替pstring如下:
const char * cstr = 0; //错误,此为底层指针,为指向常量字符的非常量指针