函数的返回值使用传引用返回还是传值返回

最近学习到运算符重载,关于函数使用传引用返回还是传值返回的理解一直有些模糊,决定在此小总结一下!

引用的概念:
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
引用的特性:

int main()
{
    
    
	int a = 10;
	int &b = a;//b是a的别名,通过ab都可以修改a的值
	a = 20;
	b = 30;
	int &c = a;//1.可以有多个别名
	int &d = b;
	//int&e; 错误,2.必须在定义时初始化
	return 0;
}

3.引用一旦引用一个实体,再不能引用其他实体。
引用的作用:
首先我们看看常用的传值返回,如下:

//常用的传值返回
int count()
{
    
    
	static int n = 0;
	n++;
	//...
	return n;
}
//传值返回:这里将n拷贝给了临时变量(int),临时变量再拷贝给ret。
//相当于进行了两次拷贝。
int main()
{
    
    
	int ret = count();
	printf("%d\n", ret);

	return 0;
}

传引用返回:

//传引用返回
int& count()
{
    
    
	static int n = 0;//static作用:延长n的生命周期,使n出了作用域还能存在
	n++;
	//...
	return n;//[int&] = n;
}
//传引用返回:临时变量[int&]是n的引用,就没有拷贝。然后再把临时变量拷贝给ret。相当于只进行一次拷贝
int main()
{
    
    
	int ret = count();
	printf("%d\n", ret);
	return 0;
}

总结

对于除了作用域还能继续存在的变量,我们尽量使用传引用返回,这样可以减少一次拷贝,节省了内存空间!

猜你喜欢

转载自blog.csdn.net/du1232/article/details/115055471