C++引用

本文介绍了C++中的引用,包括引用的定义、用途、与指针的区别。引用作为函数参数能实现按引用传递,避免值传递的拷贝开销。此外,常量引用提供了安全的参数传递方式,并允许函数处理const和非const数据。引用也可用于返回值,但需注意避免返回生命周期短暂的对象引用。
摘要由CSDN通过智能技术生成

C++引用

引用(reference)是C++对C语言的重要扩充。引用和指针具有相似的功能,都可以让你间接引用其他对象,对目标变量的内容进行直接操作。
引用的主要用途是为了描述函数的参数和返回值,特别是为了运算符的重载。

一、什么是引用

引用就是某一变量(对象)的一个别名,对引用变量的操作与对变量直接操作效果完全一样。引用与指针一样都是让你间接引用其他对象。

引用的声明方法:数据类型 &引用名=目标变量名;

引用声明允许引用和目标变量互换—它们指向相同的值和内存单元。

int a;
int &b = a;	//与写法int& b = a 一样。
//a为目标原名称,b为目标引用名。
b=1; //等价于直接给a赋值 a=1;
b++; //相当于a++
  • 声明引用时,必须同时对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
  • &在此不是求地址运算,而是起标识作用。(巧记:&和类型在一起是引用,单独和变量在一起是取址)
  • 对引用求地址,就是对目标变量求地址。&b与&a相等。编译器在一般将其实现为const指针,即指向位置不可变的指针。即引用实际上与一般指针同样占用内存。
int a = 3;
int &b = a;    //&为引用
//int * const pr = &a; //常量指针,引用b扮演的角色与表达式*pr相同
//常量指针,指针指向的数值可以改变,然而指针所保存的地址却不可以改变。
int *p;
p= &a;    //指针赋值,&为取地址
/*指针p与引用b都指向同一地址(变量a),输出p、&a和&b的值相等*/

引用是对指针的优化,一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。

不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。

void printDouble(const double& rd)
{
   
	cout << rd; // 不需要测试rd,它肯定指向一个double值
} 

相反,指针则应该总是被测试,防止其为空:

void printDouble(const double *pd)
{
   
	if (pd) {
    // 检查是否为NULL
		cout << *pd;
	}
}

指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。

string s1("Nancy");
string s2("Clancy");
string& rs = s1; // rs 引用 s1
string *ps = &s1; // ps 指向 s1
rs 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值