指针与引用的初始化&顶层底层const变量初始化问题

- 指针与引用的初始化

int i = 1;
const j = 2;
//错误,&不可以作用在literal value上
int *ptr = &2;
const int *ptr = &2;
int *ptr = &i//正确
int *ptr = &j//错误,底层const之间的转换问题
int &quote = 2//错误,int引用不能绑定在literal value上
const int &quote = 2//正确

- 顶层和底层const赋值

顶层赋值忽略const(也就是可以为顶层const初始化一个非const值,也可以为一个非const值初始化一个顶层const值,并且被初始化的对象类型不改变)

int test = 2;
int *ptr_non_ct = nullptr;
int *const ptr_ct = ptr_non_ct;//正确,并且ptr仍然是一个int*
ptr = &test//错,因为ptr还保持着int* const的顶层const性质
//////////////////////////////////////////////
int *const ptr_ct = nullptr;
int *ptr_non_ct = ptr;
ptr_non_ct = &i;//正确

//(int*)向(const int)*const 类型转换,既有底层const也有顶层const,且还保持了顶层const的性质

const int *const PTR_ct = ptr_non_ct;
////////////////////////////////////////////
int *const ptr_ct = PTR_ct;//错误,底层const不能由const向非const转换

- PS:

同样的我们可以解释接受顶层const参数和非const参数的两个重载函数是不正确的

int test (int *);
int test (int *const)

因为不管传的是int实参还是int const实参都是可以的,编译器无法进行匹配,所以本质上是一样的

int TEST (int *);
int TEST (const int*);

这两个底层const本质就不一样了,因为const int* 无法传给int*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值