引用类型「建议收藏」

引用类型「建议收藏」1.引用reference有时候又称为别名(alias),它可以用作对象的另一个名字。引用类型由类型标识符和一个取地址操作符来定义引用必须被初始化例如intival=1024

大家好,又见面了,我是你们的朋友全栈君。

1.

引用 reference 有时候又称为别名 (alias), 它可以用作对象的另一个名字。

引用类型由类型标识符和一个取地址操作符来定义 引用必须被初始化 例如 
int ival = 1024;

// ok: refVal 是一个指向 ival 的引用
int &refVal = ival;  

// 错误 引用必须被初始化为指向一个对象 
int &refVal2;

一旦引用已经定义, 它就不能再指向其他的对象, 这是它为什么必须要被初始化的原因 。

 

2.

int min_val = 0;  
 
// ival 被设置为 min_val 的值 
// refVal 并没有引用到 min_val 上 
refVal = min_val;
    引用的所有操作实际上都被应用在它所指的对象身上, 包括取地址操作符 例如:
refVal += 2;  
    将 refVal指向的对象 ival加 2 类似地 如下语句 
int ii = refVal;
    把与 ival  相关联的值赋给 ii 而 
int *pi = &refVal;  
    用 ival的地址初始化 pi

 

3.

const引用可以用不同类型的对象初始化 只要能从一种类型转换到另一种类型即可 
也可以是不可寻址的值 如文字常量 例如 
double dval = 3.14159;
 
// 仅对于 const 引用才是合法的
const int &ir = 1024;
const int &ir2 = dval;
const double &dr = dval + 1.0;

同样的初始化对于非const引用是不合法的

原因:

引用在内部存放的是一个对象的地址 它是该对象的别名 对于不可寻址的值 如文字 常量 以及不同类型的对象 编译器为了实现引用 必须生成一个临时对象 引用实际上指 向该对象 但用户不能访问它 例如 当我们写 
double dval = 1024;
const int &ri = dval;
    编译器将其转换成 
int temp = dval;
const int &ri = temp;
    如果我们给ri赋一个新值 则这样做不会改变dval 而是改变 temp 对用户来说 就好 像修改动作没有生效 这对于用户来说 这并不总是好事情 
    const引用不会暴露这个问题 因为它们是只读的 不允许非 const引用指向需要临时对 象的对象或值 一般来说 这比 允许定义这样的引用 但实际上不会生效 的方案要好
得多
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155146.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java的in.nextInt()和in.nextLine()方法的具体内涵[通俗易懂]

    Java的in.nextInt()和in.nextLine()方法的具体内涵[通俗易懂]本人也是刚开始学习java语言,在学习的过程中,老师让我们做一个模拟学生学籍管理系统的小程序。因为刚开始,做的是比较简单的,用switch语句做界面,然后配合Scanner接收输入的数字进行跳转,完成各类操作。因为跳转时输入的是数字,而跳转后的操作要输入字符串,比如:“选择1添加学生信息…输入添加学生的姓名…”这类的操作在测试的时候总是无法输入字符串像这个样子,先用nextInt()再用…

    2022年5月5日
    79
  • 使用DatabaseMetaData获取mysql表的注释

    使用DatabaseMetaData获取mysql表的注释privateList<String>getTableNames(DatabaseMetaDatamd)throwsSQLException{ArrayList<String>tables=newArrayList<String>();ResultSetrs=md.getTables(null,null,””,null);while(rs.next()){.

    2022年6月19日
    22
  • Centos7 安装和配置MySQL5.7

    Centos7 安装和配置MySQL5.7第一步,下载MySQL安装[root@localhost~]#cd/home/data/[root@localhostdata]#lsget-docker.shnginx-1.10.1nginx-1.10.1.tar.gzredis-5.0.3redis-5.0.3.tar.gzserver-jre-8u131-linux-x64.tar.gzzooke…

    2022年5月9日
    44
  • 终端terminal个性化配置[通俗易懂]

    终端terminal个性化配置[通俗易懂]http://blog.csdn.net/pipisorry/article/details/39584489{本文介绍linux终端字体颜色设置、终端提示符显示内容设置、自定义alias命令}linux打开终端快捷键:ctrl+alt+t新窗口中打开ctrl+shift+t新标签页中打开个人配置文件介绍系统默认状态下的终端显示为紫底白字(皮皮的…

    2022年7月13日
    12
  • 今天忙着画一个用例图,发现一个好用的工具图片_用例图画法

    今天忙着画一个用例图,发现一个好用的工具图片_用例图画法临时画用例图,Rose给卸载了,去网上查了查还真有在线制作的工具,推荐给大家ProcessOn(https://www.processon.com/)下面是我用它画的一幅用例图。

    2022年9月7日
    0
  • jni 头文件_java.io.file

    jni 头文件_java.io.file1,cmd切换到应用工程目录下如示例中的D:\zxy\IDCardQualityLib2,执行javah命令,红色部分为sdk平台android.jar路径,蓝色部分为生成的jni类名 D:\zxy\IDCardQualityLib>javah-classpath bin/classes;d:\tool\adt-bundle-windows-x86-20131030\adt-b

    2022年9月2日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号