最近学习到运算符重载,关于函数使用传引用返回还是传值返回的理解一直有些模糊,决定在此小总结一下!
引用的概念:
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
引用的特性:
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;
}
总结
对于除了作用域还能继续存在的变量,我们尽量使用传引用返回,这样可以减少一次拷贝,节省了内存空间!