C++ 类型别名为指针类型时,const的修饰情况

如果类型别名指代的是复合类型,那么把它用到声明语句中产生的效果会和预想的不一样(预想的就是把别名替换为所指代的内容,再判断其数据类型)。

使用typedef

	typedef char * pstring;
	pstring a = 0;

	const pstring cstr = 0;
	const char * cstr1 = 0;

	const pstring *ps = 0;
	const char ** ps1 = 0;

在这里插入图片描述

  1. a的类型为char *,很自然,因为声明时只用到了别名。
  2. 分析cstr1,从对象往指针分析:首先是常量char,然后是指针。
  3. 分析cstr,与cstr1的区别只是使用了别名,但效果和预想的不一样。从对象往指针分析:首先是char,然后是常量指针。
  4. 分析ps1,从对象往指针分析:首先是常量char,然后是一级指针,然后是二级指针。
  5. 分析ps,与ps1的区别只是使用了别名,但效果和预想的不一样。从对象往指针分析:首先是char,然后是一级常量指针,然后是二级指针。

总结:const会直接修饰到类型别名指代的指针上去,而不会修饰到底层的对象本身上去。

使用using

将第一句替换为using pstring = char*,和上面效果是一样的。

使用define

因为define只是简单的宏文本替换,所以这里的效果肯定会和预想的一样了。
但需要注意下面这个坑:(在一条语句中定义多个变量,符号&和*只属于某个声明符,而非数据类型的一部分)

#define ptype int*;
ptype p1,p2;            // 即int* p1, p2; p1为指针,p2是个int值
            
typedef int* p
ptype p1,p2;            //即int* p1, int*p2; p1, p2都是指针

const与define的组合效果就不试了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值