专业编程基础技术教程

网站首页 > 基础教程 正文

C++——“引用”与“const引用”

ccvgpt 2024-08-08 12:56:25 基础教程 16 ℃

我们在学习C++的过程中,有一个知识点往往被初学者忽略,那就是“引用”,在实际程序中,引用主要用作函数的形式参数。在《C++ primer》一书中作者给予了引用一个经典的通俗易懂的解释,如下:

C++——“引用”与“const引用”

引用(referance)就是对象的另一个名字。

举个例子说明,我们身份证上的名字是我们的官方用名,可大部分同学还有自己所谓的小名,此时这个小名就是我们大名的一个引用,不管别人叫我们大名还是小名,都表示咱们自己这个人。引用的道理就是这样,“形变而质不变”


引用

  1. 引用的简单介绍

引用是一种复合类型(compound type),通过在变量名前添加“&”符号来定义。引用必须用与该引用同类型的对象来初始化(敲黑板,这句话很重要,配合下面的例子耐心揣摩),例如

注释掉的两条语句是不合法的,因为

  • 引用必须初始化

  • 初始化必须是一个对象

运行程序,可得val和reval的结果都是1024,毕竟引用reval只是对象val的一个别名,内容都一致。

2. 赋值对引用的影响

因为引用只是它绑定的对象的别名,作用在引用上的所有操作,事实上都是作用在绑定的对象上的(即引用初始化的右值),例如

对引用reval初始化后,再对引用赋新值,此时绑定的对象val也被赋了新值,此时程序的输出结果都为2048。至此,要牢记引用只是对象的另一个名字这一基本而十分重要的概念。


const引用

const引用是指向const对象的引用。const引用是一种特殊的引用方式,主要表现在以下几个方面:

1. const引用只能是指向const定义的对象;

注释掉的语句是不合法的,因为reval是非const引用,它不能被const类型的对象赋值。那么就有意思了,问题也就来了,如果在上述程序中,第一行代码中的val改为int型,第三行代码中的引用&reval改为const int型,即如下图所示,那么程序可以编译通过吗?答案是可以的,因为“const引用”是指“指向const对象的引用”,下图第二行代码中的val不是const类型也没有关系,只要引用是const类型就行。

2. const引用可以初始化为不同类型的对象或初始化为右值,如字面值常量;

以上语句都是合法的,只不过要注意不同类型间的转换。

3. const引用是只读的

const引用一旦被初始化后,任何对const引用的赋值都是不合法的,这样做,可以防止在程序中的任意赋值对程序整体造成的重大影响,增强了程序的可读性,减少了出错的可能性。


C++中的语法灵活多变,有效利用“引用”,可以提高的程序开发的效率。

欢迎各位同学与我进行讨论~

Tags:

最近发表
标签列表