引用类型「建议收藏」

引用类型「建议收藏」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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 汉字转拼音(较完整)「建议收藏」

    汉字转拼音(较完整)「建议收藏」转至:https://www.cnblogs.com/jwfgsf/articles/1348668.htmlpublicclassPingYin{#region//gb2312中的汉字编码//01-09区为特殊符号。//16-55区为一级汉字,按拼音排序。//56-87区为二级汉字,按部首/笔画排序。//每个汉字及符号以两个字节来表示…

    2022年6月21日
    31
  • 【直观详解】什么是正则化

    【直观详解】什么是正则化转自:https://charlesliuyx.github.io/2017/10/03/%E3%80%90%E7%9B%B4%E8%A7%82%E8%AF%A6%E8%A7%A3%E3%80%91%E4%BB%80%E4%B9%88%E6%98%AF%E6%AD%A3%E5%88%99%E5%8C%96/https://www.zhihu.com/question/20924039【内容简介】主…

    2022年7月13日
    17
  • unity update 协程_Unity 协程的原理

    unity update 协程_Unity 协程的原理Unity协程的原理发布时间:2019-06-1318:45,浏览次数:1118,标签:Unity协程不是多线程,协程还是在主线程里面(注:在Unity中非主线程是不可以访问Unity资源的)1、线程、进程和协程的区别进程有自己独立的堆和栈,即不共享堆也不共享栈,进程由操作系统调度线程拥有自己独立的栈和共享的堆,共享堆不共享栈,线程亦有操作系统调度(标准线程是这样的)协程和线程一样共享堆不共…

    2022年6月16日
    78
  • 微信自动回复机器人含源码和安装包[通俗易懂]

    微信自动回复机器人含源码和安装包[通俗易懂]介绍微信自动回复机器人,有三个机器人可供选择,可在界面进行配置,可定时提醒,bs端程序,基于C#winfrom程序安装教程源码地址:https://gitee.com/xiaoyutou_647/wechat-auto-reply-robot/blob/master/README.md直接打开\Setup1\setup.exe即可安装需要安装的环境已经集成使用说明1.点击启动微信2.扫码登陆3.运行成功4.5.根据最前面的id开启自动恢复功能6.也可进行语音唤醒,一起

    2022年10月1日
    3
  • qml入门教程_前端从入门到放弃

    qml入门教程_前端从入门到放弃发现了一个问题:QML:如果你发现了你的main.cpp是这个就会爆上面错误。修改为:……….QMLweb:直接给跪下了https://qmlweb.github.io/&l

    2022年8月1日
    7
  • 算法(一)时间复杂度「建议收藏」

    算法(一)时间复杂度「建议收藏」算法很重要,但是由于做移动开发并不经常用到,所以很多同学早就将算法打了个大礼包送还给了老师了,况且很多同学并没有学习过算法。这个系列就让对算法头疼的同学能快速的掌握基本的算法。过年放假阶段玩了会游戏NBA2K17的生涯模式,没有比赛的日子也都是训练,而且这些训练都是自发的,没有人逼你,从早上练到晚上,属性也不涨,但是如果日积月累,不训练和训练的人的属性值就会产生较大差距。这个突然让我意识到

    2022年5月15日
    41

发表回复

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

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