一、基础
引用就是内存取别名
int main() {
int a = 10;
int& b = a;//引用的声明
int& c;//编译失败,引用必须依赖某个变量
system("pause");
return 0;
}
二、用处
//指传递
void my_swap(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
//引用传递
void my_swap2(int& a, int& b) {
int temp;
temp = a;
a = b;
b = temp;
}
//指针传递
void my_swap3(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 10;
int b = 20;
my_swap(a , b);
cout << "a : " << a << ", b : " << b << endl;//打印结果:a : 10, b : 20,没有实现交换
int c = 10;
int d = 20;
my_swap2(c, d);
cout << "c : " << c << ", d : " << d << endl;//打印结果:c : 20, d : 10,实现交换
int e = 10;
int f = 20;
my_swap3(&e, &f);
cout << "e : " << e << ", f : " << f << endl;//打印结果:e : 20, f : 10,实现交换
system("pause");
return 0;
}
三、函数当左值
函数返回的是引用,则返回的是变量本身。
//返回值内容
int fun01() {
static int a = 10;
a++;
return a;
}
//返回值本身
int& fun02() {
static int a = 10;
a++;
return a;
}
int main() {
//fun01() = 20;//编译不通过,fun01返回的是a的值10。左值是10,不可修改
fun02() = 30;//相当于a = 30;
system("pause");
return 0;
}
四、常引用
常引用声明:const int& y
,让引用只读属性。
int main() {
//普通引用
int a = 40;
int& b = a;
b = 30;
cout << "a : " << a << endl;
//常引用
int x = 10;
const int& y = x;//y为常引用,让引用只读属性,不能通过y来修改x的值
x = 20;
y = 60;//编译不通过,y是常引用,不可通过引用y修改x的值
system("pause");
return 0;
}
可以通过字面量初始化常引用
int& b = 10;//编译失败,字面量无法给引用赋值,因为10没有内存地址,而引用就是给内存取别名
const int& b = 10;//编译成功,C++编译器会给b分配一个内存空间