设为首页 加入收藏

TOP

2.5.1 类型别名
2013-10-07 16:26:19 来源: 作者: 【 】 浏览:90
Tags:2.5.1 类型 别名

2.5.1  类型别名

类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。

有两种方法可用于定义类型别名。传统的方法是使用关键字typedef:

  1. typedef double wages;   //wages是double的同义词  
  2. typedef wages base, *p; //base是double的同义词,p是double*的同义词 

其中,关键字typedef作为声明语句中的基本数据类型(参见2.3节,第50页)的一部分出现。含有typedef的声明语句定义的不再是变量而是类型别名。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。

新标准规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名:

  1. using SI = Sales_item;  // SI是Sales_item的同义词 

这种方法用关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。

类型别名和类型的名字等价,只要是类型的名字能出现的地方,就能使用类型别名:
 

  1. wages hourly, weekly;       // 等价于double hourly、weekly;  
  2. SI item;                    // 等价于Sales_item item 

指针、常量和类型别名

如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句里就会产生意想不到的后果。例如下面的声明语句用到了类型pstring,它实际上是类型char*的别名:

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

上述两条声明语句的基本数据类型都是const pstring,和过去一样,const是对给定类型的修饰。pstring实际上是指向char的指针,因此,const pstring就是指向char的常量指针,而非指向常量字符的指针。

遇到一条使用了类型别名的声明语句时,人们往往会错误地尝试把类型别名替换成它本来的样子,以理解该语句的含义:

  1. const char *cstr = 0;   // 是对const pstring cstr的错误理解 

再强调一遍:这种理解是错误的。声明语句中用到pstring时,其基本数据类型是指针。可是用char*重写了声明语句后,数据类型就变成了char,*成为了声明符的一部分。这样改写的结果是,const char成了基本数据类型。前后两种声明含义截然不同,前者声明了一个指向char的常量指针,改写后的形式则声明了一个指向const char的指针。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.4.4 constexpr和常量表达式 下一篇2.5.2 auto类型说明符

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)