【资料图】
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。
英语把定语后置使得可以进行类似“递归”的表达,现代汉语常把定语前置,汉语文言文倒是有大量的定语后置表达方式。
关键词: