引用的概念和使用方法

一、引用的概念

引用不是定义一个变量,而是给一个已有成员起一个别名

类型 &引用变量名 = 以定义的变量名

int a = 10;
int &b = a;

引用 的特点

1.一个变量可以有多个成员

2.引用必须初始化

3.引用只能在初始化的时候引用一次,不能改变在引用其他的变量


二、const 引用

1.const引用 可以为  非const变量  的别名

非const变量相当于可以对他进行读、写操作

而const引用,只能对他进行读,不能进行写操作

权限     读写->只读(权限可以缩小)

        int a = 4;
	const int& b = a;
	cout << a << endl;  //4
	cout << b << endl;  //4

变量的值被改变时,引用的值同时也会改变,但是不能直接改变引用的值

        a = 5;
	cout << a << endl; //5
	cout << b << endl; //5
	//b = 6;    //不能对引用进行赋值


2. const变量只能用const引用,不能使用非const引用

const变量相当于只有读的权限,没有写的权限

非const引用既有读,又有写的权限 

权限 :读->读写(不可以)

权限只能放大,不能缩小

        const int c = 1;
	const int& d = c;
	//int& d1 = c;
	const int & d2 = 5;//常量具有常性,只有常引用可以引用常量

3.不同类型变量引用要用const

        double a = 1.1;
	//int &b = a;
	const int& b1 = a;

a是double类型的,它要赋值给int类型会发生隐式类型转换

用a赋值给b时,会生成一个临时变量,即b引用的时这个带有常性的临时变量,所以要用const


三、引用做参数

1.值传递

void Swap1(int left, int right)
{
	int temp = left;
	left = right;
    	right = temp;
}

int main()
{
	int a = 10;
	int b = 20;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	Swap1(a, b);

	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	system("pause");
	return 0;
}

值传递不能改变a,b的值


2.引用传递

void Swap2(int& left, int& right)
{
	int temp = left;
	left = right;
	right = temp;
}

int main()
{
	int a = 10;
	int b = 20;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	Swap2(a, b);

	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	system("pause");
	return 0;
}

3.指针传递

void Swap3(int* left, int* right)
{
	int temp = *left;
	*left = *right;
	*right = temp;
}

int main()
{
	int a = 10;
	int b = 20;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	Swap3(&a, &b);

	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	system("pause");
	return 0;
}


引用传递和值传递

引用传递效率更高,值传递会有对象变量的拷贝,生成局部变量;

而引用是参数的一个别名,本身不占内存,所以开销小。

四、引用做返回值

1、正常的值返回

int Add(int a, int b)
{
	int c = a + b;
	return c;
}
int main()
{
	int a = 10;
	int b = 20;
	int ret = Add(a, b);
	//int& ret = Add(a, b); //不能用非const的引用,因为Add函数返回的c是一个临时变量
	const int& ret = Add(a, b);
	cout << ret;
	system("pause");
	return 0;
}

Add函数为值返回,它返回的是c的一个具有常性的临时变量,c出了作用域以后会销毁,所以要在前面加const;

2.引用做返回值

int& Add(int a, int b)
{
	int c = a + b;
	return c;
}
int main()
{
	int a = 10;
	int b = 20;
	int& ret = Add(a, b);
	cout << ret;
	system("pause");
	return 0;
}

注:尽量不要返回临时变量的引用,如果不是临时变量,则可以用引用返回

因为临时变量出了作用域以后就会销毁,临时变量的引用相当于它的别名,变量销毁了以后,引用就会指向不确定的内存

猜你喜欢

转载自blog.csdn.net/audience_fzn/article/details/80386629