[C++ Primer Plus] 引用

栏目: C++ · 发布时间: 5年前

内容简介:Declares a named variable as a reference, that is, an alias to an already-existing object or function.先从一个简单的例子开始:上述代码似乎不用解释都知道它所要说明的问题。似乎与今天的主题无关,但是不着急,看下

认识引用

Declares a named variable as a reference, that is, an alias to an already-existing object or function. 来自: C++参考手册

先从一个简单的例子开始: 交换函数 swap()

// 代码片段01
void swap01(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

// 代码片段02
void swap02(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main(int argc, const char * argv[]) {

    int a= 10, b = 20;
    
    swap01(a, b); // 不会交换
    
    swap02(&a, &b); // 会交换

    return 0;
}

上述代码似乎不用解释都知道它所要说明的问题。似乎与今天的主题无关,但是不着急,看下 代码片段02 。内部充斥着 *a*b 这样的操作,代码似乎不够简洁。有没有什么方式可以使其更简洁一些呢?有! 引用!!

有了引用以后,代码是这样的:

void swap03(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

int main(int argc, const char * argv[]) {

    int a= 10, b = 20;
    
    swap03(a, b); // 会交换
    
    return 0;
}

代码看起来和上面没有什么大的差别。 &a&b 似乎是! 在取地址。 实际上不是的。 它表示的 a 是某个 int 类型变量的引用(或者说某个 int 类型变量的 别名 )。

那么如何创建一个 引用 呢?

int main(int argc, const char * argv[]) {

    int num = 10;
    
    int & ref = num; // 创建一个引用。
    
    int & refref = ref; // 创建一个引用

    return 0;
}

如上,创建的是 num 的引用,名字叫 ret 既然是引用,就是说,使用 numret 没有任何区别。

没有任何区别是什么意思?意思就是说: numret 都是同一个内存地址的名称。举个小例子,如图:

[C++ Primer Plus] 引用

num: 周樟寿
ref: 周树人
refref: 鲁迅

只是名字变了,但它都是同一个内存!!

说到这里,有没有发现其实引用是什么?像不像下面这样:

int &ref = num;

// 等价于
int *ref = #

另外有一个需要注意的地方是:引用一旦创建,便不能更改(只读)!!既然不能修改,那就说明必须在创建时就要给引用初始化!!!。

int one = 10;
int two = 20;

// 错误01(ref创建时就要被初始化)
int &ref;
ref = one;
// 正确写法:int &ref = one;

// 异常 02(引用一旦创建,便不能修改)
int &ref = one;
ref = two; // 这句话不会报错,但是它表达的意思不是让ref变成two的引用。而是将 two 的值,赋值给 ref。即,ref = 20;

至此,对引用有了一个基本的认识。总结一下:

  1. 引用是某个变量的别名。
  2. 引用一旦创建,便不可以修改。
  3. 引用创建时,必须要初始化。

基于以上的观点。我们可以对引用有一个本质上的认识,即 指针常量

int & ref = num;

// 等价于
int * const ref = #

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

上瘾

上瘾

[美] 尼尔·埃亚尔、[美] 瑞安·胡佛 / 钟莉婷、杨晓红 / 中信出版集团 / 2017-5 / 49.00元

——为什么我们会习惯性地点开某个App? ——这种使用习惯到底是如何养成的? ——为什么有些产品能让我们戒不掉,而其他的产品却不行? ——是否有什么秘诀能让用户对你的产品形成使用习惯,欲罢不能? 《上瘾》揭示了很多让用户形成使用习惯,甚至“上瘾”的互联网产品服务背后的基 本设计原理,告诉你怎样打造一款让用户欲罢不能的产品。作者根据自己多年的研究、咨询及实际经验,提出了新颖而......一起来看看 《上瘾》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具