与返回原值的区别
引用
return的地址和返回值的地址是同一个,也就是占据着同一块内存,因此要求此时return的东西必须是一个实体(有存储地址),不能是一个作用域仅在函数中的局部变量
例如 int& fun()
{int c;
return c;} a=fun();
就会报错。因为a找不到它应该存在的地址在哪里
int& fun(int c)
{
return c;} a=fun(); 这样是正确的,a有了一个实实在在的地址,即c所在的位置,a,c指向同一处
返回原值
再开辟一块内存用于存储临时变量,最终a取到的是临时变量的地址(可能会造成地址浪费)
例如
int fun()
{int c;
return c;} a=fun(); 此时会开辟一块临时变量内存放c,a最后的地址和临时变量的相同,能取到c的值。
int fun(int c)
{
return c;} a=fun();
a和c不在一起,因为又
开辟一块临时变量内存放c,a最后的地址和临时变量的相同,而不是与原c相同。