关于顶层const和底层const

看明白了的回答。

关于const在声明中,的确很容易搞晕了,特别是
const int * const * const p;
到底是什么意思呢?
其实rule很简单:就三条
1. 永远从右往左读一个变量声明。
2. const永远修饰const出现地点左边的声明类型。
3. 如果左边没有声明类型,就修饰右边。
所以
const int * const * const p1; //两者是一致的
int const * const * const p2;
解释为:p2是一个const的指针(指针本身不能变),指向const的指针(指向的指针也不能变),指向const int,最终指向的内存区域是一个int变量,也不能变。
所以用标准写法,也就是第二种写法在理解上会方便一些。但是第一种写法过于普遍了,几乎所有代码都这么写。下次读的时候从右往左然后自动脑补最左边的const是修饰右边的类型就好。


作者:Michael Zhang
链接:https://www.zhihu.com/question/24785843/answer/128565038
来源:知乎

这是轮子哥的回答:看不懂  先马克下来

顶层和底层的翻译很容易让人误解为就只有两层,实际上当然是不是的。首先我们假设有这样的代码:

template<typename T> using Const = const T;
template<typename T> using Ptr = T*;

然后

const int *** const shit = nullptr;

要怎么看呢?很简单,不要用const和*,用Const和Ptr来表达,马上明白:

Const<Ptr<Ptr<Ptr<Const<int>>>>> shit = nullptr;

一秒学会



作者:vczh
链接:https://www.zhihu.com/question/24785843/answer/238903938
来源:知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值