c++中的引用

一、引用概念

int a=10;
int&b=a;

在以上代码中,我们称b是a的引用。
通俗的来说,就是给a取了给外号叫b,你使用b其实就是在使用a,他们的地址都是一样的。
一个元素还可以有多个引用

int a=10;
int&b=a;
int&c=b;

上面的代码中b和c都是a的引用,地址都是一样的。
引用还有几个特性

  • 创建时必须初始化
  • 引用的对象不能修改
  • 一个变量可以有多个引用
  • 引用的类型和被引用的类型要一致
int a=10;
int&b=a;
int&c=b;

int x=20;
b=x;

上面的代码中,是把x的值赋值给了b,这使得a和c的值都变成了20,并不能实现把b的指向修改成x。
————————————————————————————————————

常引用

当被引用的实体是常量时,就不能使用变量引用对其引用l

const int a=10;
//int &b=a;//这个会报错

//int&b=10;//这个会报错
const int &b=10;

int c=20;
const int &d=c;//这样之后就不能修改d的值了,但是仍然可以通过c修改其值

二、引用的应用

1.做函数参数

void Swap(int& left, int& right)
{
 int temp = left;
 left = right;
 right = temp;
}

在上面的代码中,调用该函数时,直接传入变量名即可,这时形参left和right就成了传入变量的引用,
所以以上的代码可以完成数据的交换

2.做函数返回值

int& Count()
{
 static int n = 0;
 n++;
 // ...
 return n;
}


使用引用当返回值的时候要注意,返回被引用变量的生命周期

int& Add(int a, int b)
{
 int c = a + b;
 return c;
}
int main()
{
 int& ret = Add(1, 2);
 Add(3, 4);
 cout << "Add(1, 2) is :"<< ret <<endl;
 return 0;
}

这串代码输出的结果就是随机值,因为返回的c的引用,而c的生命周期已经结束了

3.其他

在底层实现逻辑上,引用和指针其实是一样的,所以效率也是一样的

二、内联函数

当一个小型函数要进行大量的调用时候,重复建立栈帧的动作会消耗大量的性能,内联函数的出现就是为了解决这个问题,在定义函数的时候在前面加上 inline 关键字就能建议编译器将此函数成为内联函数

inline void swap(int&a,int&b)
{
    int tmp=a;
    a=b;
    b=tmp;
}

内联函数的实现就是在调 用该函数的位置将其展开,避免建立栈帧,但是直接展开会导致代码量加大,所以你在函数声明前加上inline之后,编译器会对函数进行判断,如果函数代码量比较大,则这个函数不会成为内联函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值