引用类型「建议收藏」

引用类型「建议收藏」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之文件操作[通俗易懂]

    JAVA之文件操作[通俗易懂]Console此类包含多个方法,可访问与当前Java虚拟机关联的基于字符的控制台设备(如果有)。虚拟机是否具有控制台取决于底层平台,还取决于调用虚拟机的方式。如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的(例如,由后台作业调度程序启动),那么它通常没有控制台。如果此虚拟机具

    2025年7月17日
    3
  • html如何只刷新页面指定,js控制页面刷新 JS刷新当前页面的几种方法总结

    html如何只刷新页面指定,js控制页面刷新 JS刷新当前页面的几种方法总结JavaScriptlocation.reload()方法Location对象的reload()方法用于重新加载当前文档(页面),语法如下:location.reload(false|true)说明(实战帮有javascript课程与实训项目哦,可以一试)如果该方法参数为false或者省略参数。JS页面如何实现刷新指定DIV。。。其他DIV不刷新将innerHTML所…

    2022年7月12日
    16
  • JVM(四)—一道面试题搞懂JVM类加载机制

    JVM(四)—一道面试题搞懂JVM类加载机制有这样一道面试题:classSingleton{privatestaticSingletonsingleton=newSingleton();publicstaticintvalue1;publicstaticintvalue2=0;privateSingleton(){value1++;…

    2022年5月24日
    33
  • c语言必备100代码(代码大全)

    一个完全入门初学者如何学代码,读代码和写代码,,我想学代码不知道方向谁能给我指明一个方向?1、学代码:前提是你的复有一个比较系统的学习.认真完成每一个课程中的案例.2、读代码:分制两步走:前期能读懂自己写的代码.2113后期能读懂他人写的代码和大致的知道底层的某些源码的含义.多去5261看开发文档(开发文档建议使用官方提供的4102英文版、不要使用中文自己害自己)3、写代码1653:前提是你要有…

    2022年4月18日
    1.2K
  • itextpdf生成列表基本用法

    itextpdf生成列表基本用法随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。在上一篇文章使用itextpdf生成表格基本用法中,介绍了生成表格的基本步骤和一些常用设置,同样的,在某些需求下,我们需要在pdf中展示列表,体现条理性,itextpdf同样支持,这个开源库支持很多种列表风格来满足…

    2022年6月22日
    32
  • JS数据类型之基本数据类型

    JS数据类型之基本数据类型一、数据类型简介:1.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型);2.js常用的基本数据类型包括undefined、null、number、boolean、string;3.js的引用数据类型也就是对象类型Object,比如:Object、array、function、data等;二、基本数据类型特点:1.基本…

    2025年9月20日
    7

发表回复

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

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