专业编程基础技术教程

网站首页 > 基础教程 正文

C++ const 修饰 引用,到底有什么作用?包含什么?linux C++第10讲

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

const 修饰引用

我们知道,const 是修饰一个数据为常量,而“引用”是给变量取一个别名,起到指针的作用,但是比指针容易操作。

所以,在C++开发中,为了达到“形参的改变,引起实参的变化”,可以把参数定义为一个引用。但是,有时候,我们为了在函数中,形参不能够被修改,起到保护的作用,就可以把这个形参引用定义为const类型。

C++ const 修饰 引用,到底有什么作用?包含什么?linux C++第10讲

const 修饰的引用,就表示这个引用的值不能够被修改。定义的格式如下:

const 类型说明符 & 引用名;

例如 :

int x = 12689;

const int &y = x; //定义y 是一个常量(常引用),所以,y 的值不能修改;

y = 123; //错误,因为y 是一个常量,所以,其值不能修改;

注意:这种情况下,只有引用y是常量,变量x还是普通的变量,变量x的数据还是可以被修改。

使用这一方法,我们可以在函数的设计中,定义const类型的引用,保护形参不能够被修改。测试例子如下:

因为 y 变量是 const 类型的引用变量,所以,执行:

y = 888;

此时,修改引用变量y的值,是非法的操作。所以,通过这种方式,保护变量x的数据在func()函数中不被修改。

引用类型的参数

在Linux C课程中,我们学习了函数的定义,了解函数形参和实参的关系。在函数的定义中,形参使用指针类型,那么,可以实现形参的变化,引起实参的改变。

那么,在C++中,函数的形参使用“引用”类型,可以实现类似“指针”的功能,形参的变化可以引起实参的改变。如下是一个具体的测试代码。

所以,调用switch_val()函数,如下:

switch_val(x, y);

此时,对引用形参的初始化,是在函数调用的时候,通过实参传递给形参来实现的。当在main()函数中调用switch_val (x, y) 的时候,有实参把变量名传递给形参,所以,相当有:

int &a = x; // a 就为 x 的别名

int &b = y; // b 就为y 的别名

所以,a和 x 代表同一个变量,b和y代表同一个变量。在switch_val ()函数中使 a 和 b 的值对换,显然,x和y的值同时改变了。

用了引用的方法,就轻而易举地解决了两个变量相互换值的问题。

C++调用函数时有两种传递数据的方式,一种是常用的方法:将实参的值传递给形参,形参是实参的一个拷贝。这种方式称为:传值方式调用(call by value)。另一种是将实参的地址传给引用型形参,这时,形参与实参是同一个变量,这种方式称为:引用方式调用(call by reference)。

注意:用引用能完成的工作,用指针也能够完成。但引用比指针的使用更直观,方便,直截了当,容易理解。有些过去只能用指针来处理的问题,现在,可以用引用来代替,从而降低了程序设计的难度。

Tags:

最近发表
标签列表