为什么见到不同的typdef解释??

goldcool 2007-05-26 07:28:33
在C++ Templates 中

typdef char* CHARS;
typedef CHARS const CPTR; //指向char类型的常量指针
//这个定义被当成 typedef char* const CPTR

typedef char* CHARS;
typedef const CHARS CPTR; //指向常量char类型的指针
            //而且这个定义是被当成 typedef const char* CPTR

但C++ Primer中

typedef char* CHARS;
extern const CHARS CPTR; //这个定义却被当成是
//typedef char* const CPTR

为什么会有两种不同的解释呢?
...全文
191 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng2000 2007-05-26
  • 打赏
  • 举报
回复
From goldcool:
难道我误会了在c++ templates中的解释意思了?是不是它只想举例说明最好把const放在类型的后面,而不是前面.
=========================================
是的,这正是c++ templates举此例子的意图.
我觉得这个例子很有意思,它警醒我们typedef并不是简单地替换, 即:

typdef char* CHARS;
typedef const CHARS CPTR;



typdef const char * CPTR;

所声明的CPTR是不一样的类型!
goldcool 2007-05-26
  • 打赏
  • 举报
回复
难道我误会了在c++ templates中的解释意思了?是不是它只想举例说明最好把const放在类型的后面,而不是前面.
Vitin 2007-05-26
  • 打赏
  • 举报
回复
是的,
typdef char* CHARS;
typedef const CHARS CPTR;



typdef const char * CPTR;

不一样,是因为CHARS已经是一个指向可变char的指针类型了,在它基础上加const,不管之前或之后,都是对指针而言,而不是对指针指向的对象而言。
其实它涉及的是操作符优先级问题。
typedef const CHARS CPTR 其实相当于 typedef const (char *) CPTR,是先有指针再有const,与 typdef const char * CPTR; 的差别是明显的。当然typedef const (char *) CPTR的写法是不允许的,因此写成两个typedef,表达了操作符的优先关系。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧