引用即给变量起别名,初始化如下:
int a = 10;
int &b = a;
1、改变引用的值,变量也会改变值。
2、引用必须要初始化,不能仅仅声明。
3、引用一旦初始化后就不能再改变,它的本质是指针常量。比如b已是a的引用,就不能改成c的引用了。 要把赋值操作和更改引用区分开。
int &b = a;
// 实际上是
int* const b = &a;
4、在函数中的引用传递
void swap1(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void swap2(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
int main(){
int a = 10;
int b = 20;
swap1(&a, &b);// 地址传递,形参会修饰实参
cout << a << " " << b << endl;
// 输出 20 10
swap2(a, b);// 引用传递,形参会修饰实参
cout << a << " " << b << endl;
// 输出 20 10
}
5、引用作为函数的返回值,可以作为左值。
int& test(){
// 此处不能是局部变量,因为在函数执行完后会被释放,只是编译器仅会保存一次
// int a = 10;
// 因此要改为静态变量,在程序结束后由系统释放
static int a = 10;
return a;
}
int main(){
int &ref = test();
cout << ref << endl;
// 输出为10
test() = 20;
cout << ref << endl;
// 输出为20
return 0;
}
6、const加引用
// 这样是不行的
int &ref = 10;
// 这样是行的,编译器会优化这个代码
const int &ref = 10;
// 相当于
// int temp = 10;
// const int &ref = temp;