C++中的类型别名

本文写作时长1小时


以前我们学习过C++中的引用,引用就是变量的别名。不光变量可以定义别名,类型也可以声明别名。

声明类型的别名有两种方式

从C继承过来的typedef

typedef double wages;
typedef wages base,*p;

double == wages == base double * == p

这些类型都是可以互换的。其中,typedef是作为基本数据类型的一部分出现,typedef出现的声明语句定义的不是变量而是类型别名。值得一提的是,像*这样的符号属于类型修饰符,修饰前面的类型用的,而*p则叫做声明符,声明符中可以出现类型修饰(比如*),这和定义变量相差无几,所以也能由基本数据类型构造出复合类型来。

新标准中的 别名声明 using

using wages = double;
using p = wages *;

常量指针的类型别名

typedef int *pint;
int i = 0;
const pint pi = &i;

千万别蒙,再解释一遍,typedef int是属于基本数据类型部分,*是类型修饰符,表明这是个指针。*pint属于声明符,声明符中包含了一个类型修饰符*pint是类型别名的名字。那么pint是什么类型的别名呢?掐头去尾,中间的部分int *,所以pint是一个指向int类型的指针类型

那么,pi就是一个指向int类型的指针变量,由于基本类型中有const,所以pi是一个指向int类型的常量指针,而非大多数程序员理解的只读指针,所以以下这种替换是错误的:

const int *pi = &i;

这样意义则完全不同,这时pi是一个指向int类型的只读指针,千万要记住,不能这么替换!

原理解读:
const pint pi = &i;中,pi的基本类型是int *,也就是指针,const限定指针,即为常量指针。而在const int *pi = &i;中,pi的基本类型是intconst限定int,则成为只读指针。

最后给读者出一道思考题目

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容