传引用参数
引用的本质就是起别名,当对引用绑定的别名操作时,其实操作的是被引用的对象
int i = 0;
int &r = i;
r = 10; //此时 i等于10
void reset(int &i){
int i = 0;
}
int main(){
int j = 20;
reset(j); // 函数过程为:j = 20, i是j的别名,i = 0 ,那么j的值也变为了0
cout<<"j = "<< j <<endl;
}
使用 引用可以避免多余的拷贝
如果函数无需改变引用形参的值,最好将其声明为常量引用
void reset(const int &i){};
使用引用形参返回额外的信息
6.2.2节练习
练习6.11
void reset(int &i){
int i = 0;
}
练习6.12
引用方式更易于使用
void exchange(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
练习6.13:
void f(T) 这种是值传递
void f(&T)这种是引用传递
值传递会产生拷贝
引用传递不会
练习6.14:
当传入的实参不能被更改时用值传递
当传入的实参能被更改且要求不产生多余的拷贝时用引用传递
练习6.15:
因为s不应该被这个函数改变。但是occurs的结果必须由函数计算,并保存字符出现的次数然后隐式的返回。
这里使用const引用是可以的,但是直接复制一个char会更节省内存。
s能够在函数中被修改,如果令occurs为常量引用,则不能被修改,所以occurs为0,这样得不到我们想要的结果。