徐土豆
认证:优质创作者
所在专题目录 查看专题
c语言运行时出现segment fault的原因
一文理解C语言中的volatile修饰符
C语言中的内存布局(memory layout)
do{}while(false)结构的妙用
const修饰符并不保证运行时的常数性质
引用与指针的区别
作者动态 更多
【论文极速看】ERNIE 3.0 通过用知识图谱加强的语言模型
2星期前
工作一年时期的土豆总结——复杂度和困难度
10-22 14:24
【见闻录系列】我所理解的“业务”
10-19 11:25
markdown数学公式编辑
10-17 13:58
在linux系统上部署FTP服务时进行权限管理(利用chown,chmod命令实现)
10-09 10:24

引用与指针的区别

本文转自徐飞翔的“引用与指针的区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

引用 (&)与指针(*)都可以在C++中用于表示一个对象的间接引用,其唯一差别似乎只有obj.member和pobj->member类似的用法上的区别。但其实这两者在C++里面的具体用法和设计思想都不同的。我们知道在函数传参数时,默认是值传递,意味着需要在传参数时对传入参数进行拷贝构造,在返回时,如果也是值传递,那么同样需要进行拷贝构造。 作为一种更为高效的方法,是合适地进行引用传递,只是在函数传参和返回时传入和返回其对象的间接引用,使得这个过程更为高效,如:

int computeGradient(const Feature& input, Gradient* grad) {
	//....
	return SUCC; //状态码
}

在以上代码中,传入的引用input是一个常量,不应该被程序改变,而*grad则是用于传递梯度的指针值,应该对其进行处理,然后函数返回一个状态码表示运行状态。在这个过程中,我们发现,间接引用在实际应用中有两种类型,一种是仅仅是作为对象的引用,而不期望被程序改变;另一种是作为变量传递的。在C语言中,这两种功能都用指针传递进行,顶多加上const表示其是常量,给予编译器查错的一丝丝尊严。然而在C++中,为了更好地区分这两种功能,定义了一个『引用(&)』,引用专为第一个功能而生,因此对引用而言,必须对其进行初始化,而且初始化之后不能被改变,同时引用不能被初始化为空,因为这没有意义。相比之下,指针灵活很多,初始化为nullptr不是什么问题,而且也随时可能被改变。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 50
成为作者 赚取收益
全部留言
0/200
  • dy-J4n9lg5Q 2021-05-19 13:29
    佩服楼主
    回复