指针,const,和typedef别名

本文详细解析了在C++ Primer5th中使用类型别名与const关键字结合时产生的复杂结果。通过具体示例,展示了如何正确理解并运用这些特性,避免常见的误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值