引用类型「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。
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.cn/155146.html原文链接:https://javaforall.cn
相关文章
- 常用降压电路设计「建议收藏」
- mysql alter 修改字段类型_Mysql必读mysql 增加修改字段类型及删除字段类型「建议收藏」
- MySQL二进制日志格式类型详解「建议收藏」
- 自动化测试平台(一):前期准备和后端服务搭建「建议收藏」
- Java中byte类型的范围「建议收藏」
- c语言createthread函数用法,CreateThread函数「建议收藏」
- LARGE_INTEGER类型和QueryPerformanceFrequency()「建议收藏」
- Oracle数据库存储number类型数据「建议收藏」
- IIS7配置防盗链「建议收藏」
- 使用Python获取上海详细疫情数据(一)「建议收藏」
- Java 定时器Timer「建议收藏」
- 网路层协议——IGMP协议「建议收藏」
- shell sftp 命令大全「建议收藏」
- jquery:时间类型字符串转为Date类型「建议收藏」
- Oracle 参数 ENABLE_AUTOMATIC_MAINTENANCE_PDB 官方解释,作用,如何配置最优化建议
- Oracle 参数 INMEMORY_OPTIMIZED_ARITHMETIC 官方解释,作用,如何配置最优化建议