一、引用的概念
引用不是定义了一个新的变量,是给变量取别名,比如(林冲也叫“豹子头”)
二、引用的特性:
1.引用定义时必须初始化
2.一个变量可以有多个引用
3.引用一旦引用一个实体便不能引用其他实体
#include<iostream>
void swap(int& x, int& y)
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
//int a = 0;
////b和c为a的别名
//int& b = a;
//int& c = a;
//++c;
int a = 10;
int b = 20;
swap(a, b);
std::cout <<a <<"\n" << b << std::endl;
//注意:引用不可以替代指针,因为引用不可以改变指向
return 0;
}
三、引用的使用
1.引用传参减少拷贝提高效率和改变引用对象的同时改变被引用对象
#include<iostream>
void swap(int & x, int& y)
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 10;
int b = 20;
/*int& x = a;
int& y = b;*/
swap(a, b);
std::cout << a << "." << b << std::endl;
return 0;
}
2.引用作返回值减少拷贝提高效率和改变引用对象的同时改变被引用对象
#include<iostream>
int& func()
{
int ret = 10;
ret++;
return ret;
}
int main()
{
func() += 10;
return 0;
}
此种操作绝对不可以,因为ret是局部变量,相当于指针中的野指针
3.2const引用
引用一个const对象,但必须用const引用,const引用可以引用普通对象,因为对象的访问权限在引用的过程可以缩小,但是不能放大
#include<iostream>
int main()
{
//只有指针和引用有权限的放大和缩小
//const int a = 10;
////权限不可以放大,只能平移,但是权限可以缩小
//int& ra = a;
//此指令可以,权限可以缩小
int a = 10;
const int& ra = a;
//ra++;ra只能读
//a++;
const int x = 0;
int y = x;//这里是拷贝赋值,是两块kongjian
return 0;
}
四、
引用和指针的关系
c++中指针和引用就像两个性格迥异的兄弟,指针是哥哥,引用时弟弟,在实践中他们相辅相成
,功能有重叠性,但是各自有各自的特点,互相不可替代。
1.语法概念上引用是一个变量取别名不开空间,指针是存储一个变量的地址,要开空间
2.引用定义时必须初始化,指针建议初始化,但是语法上不是必须的。
3.引用在初始化对象后就不能引用其他对象,而指针可以在不断的改变指向对象。
4.引用可以直接访问指向对象,指针需要解引用才能访问指向对象。
5.sizeof中含义不同,引用结果为引类型的大小(随着类型的改变而改变),而指针始终是地址空间所占字节个数。
(32位平台占4个字节,64位下是8字节)
6.指针很容易出现空指针和野指针的问题,引用很少出现,引用使用起来相对安全一些