2025年引用类型「建议收藏」

引用类型「建议收藏」1 引用 reference 有时候又称为别名 alias 它可以用作对象的另一个名字 引用类型由类型标识符和一个取地址操作符来定义 引用必须被初始化 例如 int ival 1024 ok refVal 是一个指向 ival 的引用 int amp refVal ival 错误 引用必须被初始化为指向一个对象 int amp refVal2

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引用指向需要临时对 象的对象或值 一般来说 这比 允许定义这样的引用 但实际上不会生效 的方案要好得多

编程小号
上一篇 2025-02-14 09:06
下一篇 2025-02-06 16:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/141539.html