【共读Primer】12.[2.5]处理类型 Page60

对于一些难于理解的,不好被表述的类型,我们如何能够快速有效的传达我们的意思?

如果有以下这样一个数据类型,那么我们光声明一个迭代器类型就要写几十个字符

而且这样的写法不便于记忆,如果有两个类型一样但是作用不同的相同结构,那么可能就会出错

// 如果有如下的数据集合,用来表示数据的
std::map<std::string, std::map<int, std::string> >
// 该数据的迭代器类型
std::map<std::string, std::map<int, std::string> >::iterator

在这种情况下,我们可以使用类型别名,

typedef std::map<std::string, std::map<int, std::string> > BooksInfoMap; // 为类型起一个别名
BooksInfoMap bmap; // 指定类型的对象
BooksInfoMap::iterator it; // 该类型的迭代器类型
// typedef 也可以用于指针类型
typedef char * pstring;
const pstring cstr = 0;    // cstr是指向char的常量指针
const pstring *ps;        // ps是一个指针,它指向的对象是指向char的常量指针

// 进行自动类型推断,一般会忽略掉顶层const而保留底层const
for(auto it = bmap.begin(); it != bmap.end(); ++it)
{
    todo;
}


//decltype 推断表达式的类型

int sum(int a, int b)
{
    return a + b;
}

decltype(sum) // 则会到的一个函数指针类型类型是  int (*)(int a, int b)

本章内容主要有三个重要的只是点:

  1. typedef 用来给类型取别名,主要作用是清楚的表达一个复杂类型的含义,减少书写的数量

  2. auto 类型自动推断, 主要作用是用来推断一个难于理解,或难于书写的类型,以降低编码负担

  3. decltype 表达式推断类型, 我目前最多的使用时对函数指针类型的推断,因为这种类型书写起来实在太麻烦,而且容易出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值