C++引用的用法
引用是 C++ 引入的新语言特性,它是某一变量的一个别名,使用 “&” 符号标识。引用的定义格式如下:
【示例1】通过案例演示引用的用法。C++ 代码如下:
由运行结果可知,引用 ra 的地址和变量 a 的地址相同;引用 ra 的值为 10,与变量 a 的值相同。
在定义引用时,有以下几点需要注意:
在 C++ 中,引用的一个重要作用是作为函数参数。
【示例2】通过案例演示引用作为函数参数的用法。代码如下:
在【示例2】中,
如果形参为指针(址传递),可以完成变量 a、b 的交换,但需要为形参(指针)分配存储单元,在调用时要反复使用
而使用引用作为形参,就克服了值传递和址传递的缺点,通过引用可以直接操作变量,简单高效,可读性又好。
引用是隐式的指针,但引用却不等同于指针,使用引用与使用指针有着本质的区别。
显然,引用比指针更简单、直观、方便。
使用引用可以代替指针的部分操作。在C语言中只能用指针来处理的问题,在 C++中 可以通过引用完成,从而降低了程序设计的难度。
如果想使用常量值初始化引用,则引用必须用
const 引用可以用 const 对象和常量值进行初始化。示例代码如下所示:
常变量的引用必须是 const 引用,但 const 引用不是必须使用常量或常变量进行初始化,const 引用可以使用普通变量进行初始化,只是使用普通变量初始化 const 引用时,不允许通过该引用修改变量的值。示例代码如下所示:
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
数据类型& 引用名 = 变量名;
习惯使用C语言开发的读者看到“&”符号就会想到取地址。但是在 C++ 引用中,“&”只是起到标识的作用。【示例1】通过案例演示引用的用法。C++ 代码如下:
#include<iostream> using namespace std; int main() { int a=10; int& ra=a; cout<<"变量a的地址"<<hex<<&a<<endl; cout<<"引用ra的地址:"<<hex<<&ra<<endl; cout<<"引用ra的值:"<<dec<<ra<<endl; return 0; }运行结果:
变量a的地址0x6ffe04
引用ra的地址:0x6ffe04
引用ra的值:10
- 第 5 行代码定义了整型变量 a 并初始化为 10;
- 第 6 行代码定义了指向变量 a 的引用 ra;
- 第 7~9 行代码分别输出变量 a 的地址、引用 ra 的地址、引用 ra 的值。
由运行结果可知,引用 ra 的地址和变量 a 的地址相同;引用 ra 的值为 10,与变量 a 的值相同。
在定义引用时,有以下几点需要注意:
- 引用在定义时必须初始化,且与变量类型保持一致。
- 引用在初始化时不能绑定常量值,如 int&b=10 是错误的。
- 引用在初始化后,其值不能再更改,即不能用作其他变量的引用。
在 C++ 中,引用的一个重要作用是作为函数参数。
【示例2】通过案例演示引用作为函数参数的用法。代码如下:
#include<iostream> using namespace std; void exchange(int& x, int& y) { int temp = x; x = y; y = temp; } int main() { int a, b; cout << "please input two nums: " << endl; cin >> a >> b; exchange(a, b); cout << "exchange: " << a << " "<< b << endl; return 0; }运行结果:
please input two nums:
10 20
exchange: 20 10
- 第 3~8 行代码定义了一个函数 exchange(),用于交换两个 int 类型变量的值。exchange() 函数有两个 int 类型的引用作为参数;
- 第 13~15 行代码通过 cin 从键盘输入两个整型数据给变量 a、b,调用 exchange() 函数交换变量 a、b 的值,并输出交换结果。
在【示例2】中,
exchange()
函数的形参如果为普通变量(值传递),由于副本机制无法实现变量 a、b 的交换。如果形参为指针(址传递),可以完成变量 a、b 的交换,但需要为形参(指针)分配存储单元,在调用时要反复使用
*指针名
获取数据,且实参传递时要取地址(&a、&b),这样很容易出现错误,且程序的可读性也会下降。而使用引用作为形参,就克服了值传递和址传递的缺点,通过引用可以直接操作变量,简单高效,可读性又好。
引用是隐式的指针,但引用却不等同于指针,使用引用与使用指针有着本质的区别。
- 指针指向一个变量,需要占据额外的内存单元,而引用指向一个变量,不占据额外内存单元。
- 作为函数参数时,指针的实参是变量的地址,而引用的实参是变量本身,但系统向引用传递的是变量的地址而不是变量的值。
显然,引用比指针更简单、直观、方便。
使用引用可以代替指针的部分操作。在C语言中只能用指针来处理的问题,在 C++中 可以通过引用完成,从而降低了程序设计的难度。
如果想使用常量值初始化引用,则引用必须用
const
修饰,用 const 修饰的引用称为 const 引用,也称为常引用。const 引用可以用 const 对象和常量值进行初始化。示例代码如下所示:
const int &a = 10;
const int b = 10;
const int &rb = b;
- 第 1 行代码定义了 const 引用 a,使用常量 10 进行初始化;
- 第 2 行代码定义常变量 b;
- 第 3 行代码定义了 const 引用 rb,使用常变量 b 进行初始化。
常变量的引用必须是 const 引用,但 const 引用不是必须使用常量或常变量进行初始化,const 引用可以使用普通变量进行初始化,只是使用普通变量初始化 const 引用时,不允许通过该引用修改变量的值。示例代码如下所示:
int a = 10; //变量a
const int &b = a; //使用a初始化const引用b
b=20; //错误
bool isLonger(const string &s1, const string &s2)
{
return s1.size() > s2.size();
}
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。