关于常量指针的引用

int main()
{
	int n[3] = { 3,4,5 };
	const int * const p = n;
	//既然有指向指针的引用,就不难想到指向常量指针的引用。
	//于是就有如下尝试
	//const int * (&r) = p;
	//结果报错如下
	//将 "const int *&" 类型的引用绑定到 "const int *const" 类型的初始值设定项时,限定符被丢弃	
	//也就是说由于顶层const被抛弃 赋予r的为 const int *类型的指针 由于引用可以改变指向对象的值,所以声明报错
	//这时候就想到了const_cast类型转换了 我们加上后代码如下
	const int * (&r) = const_cast<const int *>(p);
	std::cout << *r<<"  ";
	r += 1;
	std::cout << *r<<"  " ;
	//输出代码如下:3 4
	//也就是说使用指向 const * const 类型的指针 的引用的时候会丢失掉指针的const 这使得我们可以改变指针引用的值(指针指向的地址)。
	//这就使得源指针p的值发生了改变!!! 这很不安全!!! 所以不要使用引用来返回接口对象!!!
	std::cout << *p << "  ";
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值