[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 = #

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

查看所有标签

猜你喜欢:

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

Pro JavaScript Techniques

Pro JavaScript Techniques

John Resig / Apress / 2006-12-13 / USD 44.99

Pro JavaScript Techniques is the ultimate JavaScript book for the modern web developer. It provides everything you need to know about modern JavaScript, and shows what JavaScript can do for your web s......一起来看看 《Pro JavaScript Techniques》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码