【深度C++】之“类型别名”

本文详细介绍了C++中的类型别名,包括如何使用`typedef`和C++11的`using`声明创建类型别名。讨论了数组、引用、指针和`const`限定符的类型别名,强调了类型别名在简化复杂类型和提高代码可读性上的作用。同时,文章提醒读者注意在使用类型别名时可能出现的误解,特别是与复合类型结合时的陷阱。
摘要由CSDN通过智能技术生成

0. 什么是类型别名

随着程序越来越复杂,程序中用到的类型也越来越多,这种复杂性体现在两个方面。

一是一些类型难于“拼写”,它们的名字既难记又容易写错,还无法明确体现其真实目的和含义。

二是有时候根本搞不清到底需要的类型是什么,程序员不得不回过头去从程序的上下文寻求帮助。

解决问题一,可以使用类型别名(type alias) 技术,即给某一个类型起一个别名,让复杂的名字变简单,易于理解和使用,帮助程序员清楚地知道使用该类型的目的。

实际就是你的大名叫起来有些拗口,领导通常喜欢叫你“小张”、“老王”。

解决问题二,可以使用auto和decltype

1. 如何定义类型别名

例如,数组的索引一定是不小于0的,因此使用unsigned long基本满足数组索引的需求,此时我们若能把unsigned long叫做idx(index的缩写),我们一看就知道这个类型的值可以用来放在数组的中括号[]中,在不越界的情况下访问数组元素。

可以使用typedef关键字,实现上面的需求:

typedef unsigned long idx;

也可以使用别名声明(alias declaration) 技术,这是C++11新标准规定的方法:

using idx = unsigned long;

类型别名和类型本来的名字是完全等价的,每个别名一定可以写成一种更基础的形式。

2. 复合类型的类型别名

声明基本内置类型自定义数据类型的类型别名比较简单:

typedef double wages;  // 用一个double存储工资wages
using wages = double; // 同上

class MassachusettsInstituteOfTechnology;
typedef MassachusettsInstituteOfTechnology MIT;
using MIT = MassachusettsInstituteOfTechnology;

复合类型的声明,以及使用别名的复合类型,就容易出错了。

2.1 数组

我们可以为数组定义了一个别名:

// 可以表示二维网格的位置
typedef unsigned int ipos[2];
using ipos = unsigned int[2];

能看到typedef的定义方式,理解起来有些不同,但是using声明使用=赋值运算符,看起来直观一些。

理解typedef,我们首先考虑去掉typedef

unsigned 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值