《C++primer 第五版》读书小笔记
介绍
类型别名是一个名字,他是某种类型的同义词。
定义方式
1. 传统方式 typedef
typedef double db; //db是double 的同义词
typedef db haha,*heihei ; //haha是double的同义词,heihei是double * 的同义词
2.c++11新标准中的别名声明
using db = double; //db 是double 的同义词
指针、常量和类型别名(易错点)
先看段简短的代码:
typedef char *pstring; //pstring 是char * 的同义词
const pstring pa = 0;
const pstring *pb;
1.错误理解:
const pstring pa =0 ; 等价于 const char * pa = 0; (错误理解)
按照错误理解去看的话,上述代码中的pa是一个指向char常量的普通指针;pb是一个指针,它的对象是一个指向char常量的普通指针;
2.正确理解
pa是一个指向char对象的常量指针;
pb是一个指针,它的对象是一个指向char的常量指针;
3.原因
声明语句中用到pstring时,其基本数据类型是指针(也就是把pstring当作一个基本类型,不可拆开)。若是将其理解为char *的话,其数据类型就变成了char,而*则成为了声明符的一部分。这样改写的结果是,const char 成为了基本数据类型,显然与使用类型别名的初衷不相符。
最后切记,类型别名是对一个类型的别名,并非只是简简单单的代码上的替换。
欢迎指正和评论!