1.引用是变量的一个别名
2.一个变量可以有多个引用
3.引用必须引用合法的内存空间
4.引用必须初始化
5.引用不能向指针改变指向一样改变引用
6.数组引用
int a[10] = {0};
int (&aref)[10] = a;
7.引用的本质为指针常量
int a = 100;
int &aref = a;
//int * const aref = a;
aref = 10;
//*aref = 10;
8.函数传参3种方式:值传递,地址传递,引用传递
值传递是在栈中创建变量的副本,改变不了原值
9.非常量引用的初始值必须为左值。
何为左值:变量,数组元素,结构体变量成员,引用
右值:字面常量,包含多项的表达式比如a+b
普通变量为可修改左值
const变量为不可修改的左值
10.常量引用
const int& aref = 10;
//编译器操作
//int tem = 10;
//const int& aref = tem;
11.常量引用应用场景:不想修改外部变量但要传引用参数,可使用常量引用
12.常量引用可以进行隐式转换因为其编译器内部机制
int getdouble_noconst(int& a){
return a*a;
}
int getdouble(const int& a){
return a*a;
}
int main(){
double x = 10.0;
getdouble(x);//不会报错因为看编译器的内部操作
const int x = 10;
getdouble_noconst(x);//报错
}
13.总结:常量引用的好处:
避免无意中修改数据;
能处理const和非const实参,否则只能接受非const实参;
使函数正确生成并使用临时变量
14.使用引用变量的两个原因:
能够修改函数的数据
通过传递数据而不是整个引用,没有了副本的拷贝,提高程序的运行速度
15.1对使用传递的值而不做修改的函数:
一,如果数据比较小,如内置的数据类型或者小型的结构体,建议按值传递
二,如果数据是数组,使用指针,指针声明为指向const的指针
三,如果数据比较大,例如大型结构体,使用const指针或者const引用
四,如果数据是类对象,使用const引用
15.2对传递的值需要修改的情况:
一,如果数据比较小,如内置的数据类型或者小型的结构体,使用指针或引用
二,如果数据是数组,使用指针
三,如果数据比较大,例如大型结构体,使用指针或者引用
四,如果数据是类对象,使用引用