引用
引用:给变量起别名
**
语法: 数据类型 &别名 = 原名
**
例子:
int a = 10;
int &b = a;
可以理解为指针常量的语法糖,相当于python和java里的相似的东西
注意事项
1.引用必须初始化
2.引用不可以更改
引用做函数参数
作用
传参的时候通过引用让形参修改实参
优点
可以避免使用指针操作,比较简单
例子:交换函数
//值传递
void swapValue(int a,int b)
{
int temp = a;
a = b;
b = temp;
}
//地址传递
void swapAddress(int *a,int*b)
{
int temp = *a;
*a = *b;
*b = temp;
}
// 调用的时候 swapAddress(&a,&b);
//引用传递
void swapReference(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
//调用的时候 swapReference(a,b);
后两种方式都可以改变外部实参的值,引用书写和使用都更简单一点
引用做函数的返回值
1.不要返回局部变量的引用
可以加stastic关键字操作
2.函数的调用可以作为左值
(函数调用返回引用的时候)
int & test02()
{
static int a = 10;
return a;
}
cout << a;
10
test02() =100;
cout << a;
100
引用的本质
引用在c++内部实现是一个指针常量,关于指针的操作都由编译器帮我们做了
常量引用
作用: 不能通过这个引用修改变量
使用场景:1.修饰形参防止误操作
引用必须引一块合法的空间
int ref = 10; 报错
const int ref = 10; 不会报错,编译器会生成一个中间变量存储,不能通过ref修改10
函数的默认参数
int func (int a,int b,int c = 10)
{
return a+b+c;
}
如果我们传入了自己的数据就用自己的,如果没有,就用默认值
注意事项:
- 默认参数必须放在最后
- 如果函数声明有默认参数,函数实现就不能有默认参数了(只能有一个地方有)
函数的占位参数
void func(int a, int)
{
cout<< a<<endl;
}
对这个func传参的时候必须传两个参数,占位参数也可以有默认值
函数重载
- 同一个作用域下
- 函数名称相同
- 函数参数的类型不同,或者个数不同或者顺序不同
- 单独返回值不同不能作为重载,因为无法区分
- 用const &和&区分的只有传入常量引用的时候才会走const &
- 函数重载最好要写默认参数,否则参数少的那个有可能会和有默认参数的无法区分