引用
引用的定义
类型& 引用变量名称-=变量名称
&和类型结合称之为引用符号,不是取地址符号,代表别名意思
int main()
{
int a = 10;
int b = a;
int& c = a;
a += 10;
cout << "a= " << a << "c= " << c << endl; //a=c=20
c += 10;
cout << "a= " << a << "c= " << endl; //a=c=30
cout << "&a: " << &a << endl;
cout << "&c: " << &c << endl;//&a=&c
}
1. 引用的特点
int main()
{
int a = 10, b = 20;
//int& x;没有空引用
int& x = a;//在定义引用的时候,必须初始化 利用已有的变量进行初始化
//int&& y = x;//没有引用的引用
return 0;
}
2.引用的例子
//用c交换两个值
void Swap_int(int* ap, int* bp)
{
assert(ap != NULL && bp != NULL); //有空指针,所以要判空
int tmp = *ap;
*ap = *bp;
*bp = tmp;
}
//用引用
void Swap(int& x, int& y)
{
int tmp = x; //没有空引用,不用判空
x = y;
y = tmp;
}
int main()
{
int a = 10, b = 20;
cout << "a= " << a << "b= " << b << endl;
Swap_int(&a, &b);
Swap(a, b);
cout << "a= " << a << "b= " << b << endl;
return 0;
}
3. 引用和const关系
3.1 普通变量,const加的位置
int main()
{
int a = 10;
int& b = a;//普通变量用普通引用,也可以用常引用,但不可以改变值
b += 10;
int const& c = a;//const 修饰的是&,c是常值引用,c得值不能改变 c+=10是error
int& const x = a;//const修饰的是x,系统会忽略这个const,因为它修饰x
}
3.2 常变量
int main()
{
const int a = 10;
//int& x = a;//x+=10;不允许
const int& y = a;//常变量利用常引用
}
4. 函数设计时候的形参
void fun_a(int x) {}//值传递,形参的改变并不会传给形参
void fun_b(int& y) {}//利用引用,形参的改变就可以影响到实参,应为形参是实参的别名,形参变了,实参自然就变了
void fun_c(const int& y) {}//const修饰引用,形参是实参的别名,但是形参不可以改变,不能通过形参改变实参
5. 常引用
int main()
{
int a = 10;
const int b = 10;//一般把常引用称为万能引用
const int& x = a;//常引用引用普通变量
const int& rx = b;// 常引用引用常变量
const int& ry = 100;//常引用引用字面常量(这是底层是tmp=100,const int& rz=tmp,ry+=10不允许)
return 0;
}