快速解决 const 与 typedef 类型组合时 ,const修饰谁的问题

C++使用typedef 给复合类型定义别名时,与const结合会产生看似“令人困惑”的类型推定,例如

typedef char* pstring;
const pstring cstr=0;
const pstring *ps;

cstr到底是什么类型? 如果直接把pstring 展开成 char* ,就会认为 cstr是 const char * 类型,从而认为cstr是一个指向const char类型的指针。

但是实际上cstr是指向 char* 的const 即常量指针。

难以理解的原因在于我们用现代中文的书写方式思考。

实际上,pstring 是 a pointer to char, 那么const 自然先修饰(modifier) pointer, 故cstr是a const pointer to char,即指向char的const指针。

最后一个例子可以用同样方式展开, ps is a pointer to const pstring, 继续展开,得到ps is a pointer to const pointer to char。

英语把定语后置使得可以进行类似“递归”的表达,现代汉语常把定语前置,汉语文言文倒是有大量的定语后置表达方式。

posted @ 2023-08-13 20:01  goto2091  阅读(248)  评论(0编辑  收藏  举报