指针,const,和typedef别名

来源:互联网 发布:域名排行 编辑:程序博客网 时间:2024/05/18 03:56

C++ Primer 5th

用类型别名声明的复合类型加上const会导致复杂的结果。比如,下列声明使用了类型pstring,一个char *的别名。

typedef char *pstring;const pstring cstr = 0; //cstr是一个指向char类型的const指针const pstring *ps; //ps是一个指向char的const指针的指针

以上声明的基础类型是const pstring。一般来说,出现在基础类型中的const改变了给定的基础类型。pstring的类型是指向char的指针,所以const pstring是一个指向char的const指针,而不是一个指向const char的指针。

尽管用类型别名对应的类型来简单的词义替换别名是很吸引人的,但是是错误的:

const char *cstr = 0;//const pstring cstr的错误解释
尽管这么解释是错误的,当我们在声明中使用pstring,声明的基础类型是个指针。当我们使用char *来重写声明时,基础类型是char,符号*是声明符的一部分。在这个例子上,const char是基础类型。这种重写方式把cstr声明为一个指向const char的指针,而不是指向char的const指针。