栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

const魔怔人:引用 + 指针 + const

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

const魔怔人:引用 + 指针 + const

请看代码:

void func(const int *& p)
{...}

请问这个参数是啥?首先肯定是对 指针的一个引用。那 const 是针对谁的 const?

我们定义一个左值传入试试:

int t = 10;
int *p = &t;
func(p);//error!

用普通指针作为实参,直接就报错了:
binding reference of type 'const int*&' to 'int*' discards qualifiers

但是把 p 改成 const 的就行了

int t = 10;
const int *p = &t;
func(p);//ok!

由此可见,func 的参数是对 const指针(指向常量的指针) 的引用!为了进一步验证,可以让func 改变这个指针:

果然可行。
那么,普通指针 与 const指针 类型不同故而不能被引用。可不可以用 const_cast 转换普通指针使其可以被 func 引用呢?不行!因为 类型转换后产生了右值,无法传给左值引用。就算使用右值引用,也失去了这个函数原本的目的。

那咋办??我们原本只需将参数定义为const引用或const指针,它们既能指向const对象,又能被非const的对象使用。但是现在这个 func 就不行了,根本原因是引用的类型的要求更高,不能类型转换。—— 我是想不出办法咯!

要是有老哥看到这个博客,请教一下,该怎么做啊?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/304504.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号