C++基础知识学习笔记(4)——引用
引用
作用:给变量起别名
语法:数据类型& 变量 = 原变量
;
int main()
{
int a = 10;
int& b = a;
b = 20;
cout << b << endl;//20
cout << a << endl;//20
return 0;
}
引用使用时需要注意:
-
引用必须要初始化
创建引用但不初始化:int &b;//错误的
-
引用初始化后就不能再修改
不能再让它成为别的变量的引用了。
尝试更改,其实是赋值操作:
int main()
{
int a = 10;
int b = 1;
int& c = a;
c = b;//赋值操作(为a、c赋值为1),而不是更改引用
cout << a << endl;//1
cout << b << endl;//1
cout << c << endl;//1
return 0;
}
引用做函数参数
作用:函数传参时,用引用技术让形参修饰实参,让形参是实参的别名
优点:可以简化指针,可以修改实参(达到地址传参的效果)。
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void swap2(int &a, int& b) {
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 10;
int b = 1;
cout << a << "," << b << endl;
swap(&a, &b);
cout << a << "," << b << endl;//1,10
swap2(a, b);
cout << a << "," << b << endl;//10,1
return 0;
}
引用本质上是指针的伪装,是指针的语法糖:https://zhuanlan.zhihu.com/p/621684658
这里的&是变量声明的一部分,应该离数据类型近一点比较合适。
这个别名只在源代码层面存在,在编译后实际上还是原变量,不会多产生一个变量。
引用做函数返回值
- 不要返回局部变量的引用
- 函数的调用可以作为左值
int& get() {
static int a = 20;
return a;
}
int main()
{
int& ref = get();
cout << ref << endl;//20
get() = 1;
cout << ref << endl;//1
return 0;
}
静态变量对全局区,此区域的数据在程序结束后释放。所以上面代码中静态变量可以从函数中返回,如果是局部变量则不行。
引用的本质
本质:在c++内部是指针常量。.
常量引用
作用:const修饰形参引用,防止误操作、防止形参修改实参。
就是相比值传递,引用传递可以修改实参,但是有时不想在引用传递中允许修改实参,就加一个const修饰。