C++基本概念——类型别名

我们为什么需要类型别名?

C++中任何一个基本概念的出现的都是为了解决相应的问题,类型别名也不例外。类型别名为了简化程序中复杂类型名的书写,同时类型别名还可以提供给变量便于理解和记忆的名字。

类型别名的定义方法

1. 传统的typedef关键字

typedef double wages; //wages和double是同义词
typedef wages base,*p; //base是double的同义词,p是double*的同义词

为什么举了这样两个例子呢?其实这两个例子表示的不同的方面,第一例子描述的是基本类型,第二个例子描述的是复合类型(指针)。

2.C++11使用别名声明

using SI=Sales; //SI是类Sales的别名

很明显,新标准类型别名的声明更容易理解和记忆。

如何理解类型别名的声明

typedef char *pstring;
const pstring cstr=0;   //cstr是一个指向char的常量指针
const pstring *ps; //ps是一个指针,它的对象是指向char的常量指针

上述两条声明中基本的数据类型都是const pstring,const是修饰pstring的,pstring实际上是指向char的指针(pointer to char),因此const pstring是指向char的常量指针(const pointer)。

特别需要指出的是,把类型别名替换为他本来的形式实际上是一种错误的理解。例如,对于上面的例子,如果理解成下面的形式:

const char *cstr=0;//cstr是一个pointer to const char

这是对别名的一种错误的理解,这是因为在原来的例子中基本的数据类型为pointer to char,重写之后的基本类型变为const char,*变为修饰符。因此,修改后语句的含义是cstr是一个指向const char的指针,而原来语句的含义是指向char的常量指针。

那么通过上面的例子,我们来总结以下如何理解类型别名的声明的关键是什么。简单声明理解简单,我们就不再赘述。对于含有别名的复合类型的声明,关键是将别名作为整体去看待,然后找出声明中的基本类型,例如

const pstring ctr=0;

修改之前的基本类型是const pstring。

const char * ctr=0;

修改之后的类型别名的基本类型是const char。

你可能感兴趣的:(C++重要的基本概念)