对于一些难于理解的,不好被表述的类型,我们如何能够快速有效的传达我们的意思?
如果有以下这样一个数据类型,那么我们光声明一个迭代器类型就要写几十个字符
而且这样的写法不便于记忆,如果有两个类型一样但是作用不同的相同结构,那么可能就会出错
// 如果有如下的数据集合,用来表示数据的
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)
本章内容主要有三个重要的只是点:
typedef 用来给类型取别名,主要作用是清楚的表达一个复杂类型的含义,减少书写的数量
auto 类型自动推断, 主要作用是用来推断一个难于理解,或难于书写的类型,以降低编码负担
decltype 表达式推断类型, 我目前最多的使用时对函数指针类型的推断,因为这种类型书写起来实在太麻烦,而且容易出错。