C++11 typedef与新出现的using关键字

刚从C程序员,走向C++程序员的时候,我逐渐开始在恰当的时候,用const替代了#define。现在,C++11中又出现了一个叫using的关键词...当然,它不仅仅是本文中讲到的内容,它在命名空间、类层次关系等方面也发挥着重要的作用。

本文只讲using用作类型别名的这个点。C++11来了之后,就有两种方法定义类型别名,即传统的typedef、新标准的using。举个例子:

typedef unsigned int size_t;
using unsigned int = size_t;

推荐使用using。因为typedef有其固有的局限性,或者是易误导性。举个例子:

typedef char* pstr;
const pstr s = 0;

那么,const pstr s = 0;如果应该还原为什么样子?你觉得是const char* s = 0;,还是char * const s = 0;?我自己发明了“左物右指”这个词,下面解释一下它的意思: 1. 如果const*的左边,那么声明的是一个底层const; 2. 反之,在*右边,那么声明的是一个顶层const

举个例子:

int val = 10;
const int * p1 = &val; //不能改变val的值
int * const p2 = &val; //不能改变p2的指向

再回到typedef问题, 很显然const pstr s = 0;表明s本身应该是一个常量,那么应该还原为char * const s = 0;


References: [1] Stanley B. Lippman《C++ Primer(第5版)》 [2] 祁宇《深入C++11代码优化与工程级应用》 [3] Scott Meyers《Effective Modern C++》