C++ 引用
- 作用: 给变量起别名
- 语法: 数据类型 &别名 = 原名
[示例]
| #include <iostream>
using namespace std;
int main() {
int a = 10;
int &b = a;
cout << a << endl;
cout << b << endl;
system("pause");
return 0;
}
|
使用引用的注意事项
引用作函数参数
- 作用: 函数传参的时候,可以利用引用让形参修饰实参。
- 优点: 简化指针修改实参。
通常,函数传入参数有两种方法:
| // 值传递
void swap_a (int a, int b){
a ^= b;
b ^= a;
a ^= b;
}
// 地址传递
void swap_b (int *a, int *b){
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
|
其中值传递传入的形参不能更改实参,调用代码后实际传入的数值也不会有改变。
而引用传递如下:
| // 引用传递
void swap_c (int &a, int&b){
a ^= b;
b ^= a;
a ^= b;
}
|
引用作函数返回值
-
注意: 不要返回局部变量引用。
-
函数的调用可以作为左值存在。
[示例]
| #include <iostream>
using namespace std;
// 函数调用可以作为左值
int& test(){
// 静态变量,存储在全局区
static int a = 10;
return a;
}
int main() {
int &ref = test();
cout << "ref = " << ref << endl;
// 函数的返回值是引用,其可以作为左值进行运算
test() += 10;
cout << "ref = " << ref << endl;
system("pause");
return 0;
}
|
引用的本质
引用的本质是在c++内部实现一个指针常量。
[示例]
| #include <iostream>
using namespace std;
void function (int& ref){
ref = 100;
}
int main() {
int a = 10;
// 这行代码相当于
// int* const ref = &a;
// 为我们定义了一个指针常量,其指向不可更改
int& ref = a;
// 发现ref是引用,相当于
// *ref = 20;
ref = 20;
cout << "a: " << a << endl;
cout << "ref: " << ref << endl;
system("pause");
return 0;
}
|
常量引用
在函数形参列表中,也可以加const
修饰形参,防止形参改变实参。
[示例]
| #include <iostream>
using namespace std;
// 增加了const修饰后,此函数体内无法修改该值的参数
void showValue(const int &val){
cout << val << endl;
}
int main() {
// const修饰的引用
// 此时,代码等价于
// int temp = 10;
// const int& ref = temp;
const int& ref = 10;
// 此时ref指向的值为只读状态
// 常量引用通常用于修饰形参,防止误操作
int a = 100;
showValue(a);
system("pause");
return 0;
}
|