首先分两大阵营:C++中引用是一块阵营,

C#、Java、Javascript、Python中引用是另一块阵营。

之所以这样分是因为同一阵营中引用使用方法基本一样。

C++引用本质是个常量指针,而其他语言引用本质是个普通指针。也就意味着C++的引用一旦初始化(指向确定了),以后就不可再修改(不可再指向其他对象),而其他语言的引用可以随时修改指向。

具体区别:(先声明下面所说的赋值是指“=”)

一个变量使用无非就两种情况,读取变量的内容和给变量赋值。两大阵营中只有在读取引用时行为都一样,在给引用赋值时行为不一样。

读取引用时:都是对引用进行“解引用”,结果是读取了引用指向的实际变量的值。

给引用赋值时:C++依然进行“解引用”,所以C++中碰到给引用赋值的语句时,本质是给引用指向的变量赋值;而在其他语言中不进行“解引用”,本质是给引用这个指针赋值。

正因为C++引用在读取和赋值时表现都一样(都是解引用),所以很多书上说引用就是变量的别名,因为任何时候使用引用(不管是赋值还是取值)都是使用引向的变量,故而引用表现的就好像变量的别名一样(但要认清本质,千万不要认为引用不占内存空间,实际上他是个指针也占内存空间的)。

但是在其他语言中引用就是指针,不是变量的别名,因为给引用赋值时没有自动解引用,就是给指针赋值(操作的是指针,不再是变量了,所以不能称之为别名);取引用的值时会自动解引用,就是取得引向的变量的值。(你可以称之为“半个别名”)

那么问题来了,在其他语言中,怎么给引用引向的变量赋值呢(第二次以上的赋值,第一次是变量自己的构造函数自动赋值)?

答:只能通过copy函数,不同语言都有对copy函数的不同实现。注意copy和构造函数不一样,构造函数是给还不存在的变量赋值,也就是建立变量并给变量第一次赋值;而copy函数是给已经存在的变量赋第二次以上的值。

最后补充一下,C++、C#、Java中的引用是有类型的,也就是说指针是有类型的,不可随意更改这个引用(指针)的类型;而在Javascript、Python等脚步语言中,引用是没有类型的,也就是说指针是没有类型的,可以随意更改引用(指针)的类型,也即引用是“无类型的”,可以随意指向任何数据类型。

c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...相关推荐

  1. python爬虫如何连接数据库_手把手教你如何在Navicat中如何新建连接数据库及相关报错解决方法...

    前几天给大家分享了如何安装Navicat,没有来得及上车的小伙伴可以戳这篇文章:手把手教你安装Navicat--靠谱的Navicat安装教程.今天给大家分享一下Navicat的简单使用教程,具体的教程 ...

  2. 苹果python怎么设置字体_在Mac OS X 10.6中的Python中,无法在Matplotlib中将字体更改为Helvetica...

    我正在尝试将matplotlib字体更改为helvetica,我想在PDF图中使用.我尝试以下: import matplotlib matplotlib.use('PDF') import matp ...

  3. python实体关系抽取_【关系抽取】从文本中进行关系抽取的几种不同的方法

    关系提取是指从文本中提取语义关系,这种语义关系通常发生在两个或多个实体之间.这些关系可以是不同类型的." Paris is in France "表示巴黎与法国之间的" ...

  4. python 笔试题 英方_经典算法题 :找字符串中的逆序对(百度笔试题)

    脚本之家 你与百万开发者在一起 来自:百度研发工程师2015深圳笔试卷 编程题:给定一个文件每一行是字符串,找出所有的逆序对,比如abc和cba是逆序的对. 小贴士:返回上一级搜索"算法题& ...

  5. java获取文件中的行号_如何取的Java源代码文件中文件名和行号

    如何取的Java源代码文件中文件名和行号:) 在C/C++的程序,编译器提供了两个宏来支持取得源文件中的行号和文件名,这两个宏是__FILE__,__LINE__ 你可以如下的方法打印行号和文件名 查 ...

  6. java卡片布局 show没用_[showjava怎么用]java卡片布局中show的正确使用方法

    [showjava怎么用]java卡片布局中show的正确使用方法 问题:创建了四个按钮,分别执行上一页.下一页及两个直接跳转指定页.previous和next都没问题,但是show却始终无效,求高手 ...

  7. python 单例模式内存泄露_彻底搞懂Java内存泄露

    之前一直在简书写作,第一次发布到SF上来,也是第一次使用SF,后面会尽量同步到SF,更多文章请关注: 简书 编程之乐 转载请注明出处:谢谢! Java内存回收方式 Java判断对象是否可以回收使用的而 ...

  8. python正则表达式面试题_吐血总结!50道Python面试题集锦(4)

    Q31.如何在python中注释多行? 注释多行代码时.所有要注释的行都要在开头前加#.还可以使用快捷方式来注释多行,就是按住Ctrl键并在每个想要包含#字符的地方左键单击并键入一次#. Q32.什么 ...

  9. python释放变量内存_看完2019年阿里巴巴Python面试题详解,月薪3万不是梦

    很多人想自学Python找工作,下面给大家分享一部分阿里巴巴的Python开发工程师的面试题目: 概念理解类题目: 1.请说一下你对迭代器和生成器的区别? 答:(1)迭代器是一个更抽象的概念,任何对象 ...

  10. 学python的亲身经历_你要偷偷的学Python,然后惊呆所有人

    文章目录前言 欢迎来到我们的圈子 初见爬虫 为什么是爬虫 通用爬虫架构 爬虫的工作步骤 优秀爬虫的特性 1.高性能 2.可扩展性 3.健壮性 4.友好性 爬虫初体验 requests.get() Re ...

最新文章

  1. java ip包_java网络抓ip包 首部是个什么情况
  2. XSS漏洞自动化攻击工具XSSer
  3. Linux 进程状态详解
  4. MySQL记住密码_技术分享 | mysqlsh 命令行模式 密码保存
  5. dojo中的dojo/dom-attr
  6. Redis详解——常用命令总结(完善中)
  7. java中发红包案例之红包界面不出来的解决方案
  8. Java开发的可扩展-高性能-响应式的API网关-soul v2.2.1
  9. java高级工程师工资_java高级工程师工资为何让人艳羡不已
  10. STC单片机程序下载实战
  11. 课程设计---宾馆客房管理系统
  12. [系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向
  13. Android TextView设置跑马灯效果
  14. 控制反转和依赖注入/ scop
  15. python安装作业
  16. 阿里云centos服务器基本构建(服务器的探索之路)
  17. Graphite的安装与部署
  18. python实现屏幕截图_电脑截屏操作有哪些,用Python进行屏幕截图,只用两行代码搞定...
  19. zznu 1052 前n项和
  20. python简单的批量下载脚本

热门文章

  1. 在实践中使用延迟队列
  2. Java 7:尝试资源
  3. python 图片识别_python识别图片文字
  4. MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)
  5. Linux 命令之 sftp -- 交互式的文件传输程序
  6. 联想办公计算机,办公娱乐两不误!联想这些笔记本电脑不容错过
  7. abaqus实例_使用Python在ABAQUS中创建XYData数据
  8. C 之父:C 的成功属于意料之外,C 11是转折点
  9. php mysql 常用语句_PHP mysql基本语句指令
  10. jpg图片使用pil的resize后_如何使用PIL调整图像大小并保持其纵横比?