C++中的引用

1.引用的用法

    创建一个对象的引用只用把声明写成&val的形式就可以了,例如

    int a = 10;

    int &val = a;

    创建了一个变量a 初始化为10,又给a起了一个“别名val,通过“别名”操作对象时,就相当于直接对a 进行操作。

2.引用的特点

  •   一个变量可以有多个引用。
  •   使用引用必须初始化。
  •    引用在初始化时就唯一确定了,不能再变成其他变量的“别名”。(一个变量可以有多个别名,但别名一旦确定就不能变成其他变量的别名了)

3.const引用的用法

变量本身就是const 修饰的常变量,使用引用时也需要加上const

const int a = 10;
const int &b= a;

  • 引用不同类型的变量时因为在中间会生成临时变量,临时变量具有常性故必须加const修饰  
int d = 1;
float e = d;
//float &f = d;错误
const float &f = d;
  • const改变了变量的修改权限,相应的const引用时修改的权限也只能缩小不能放大。
int a = 10;
const a2 = 20;
int &b = a;//没有放大也没有缩小
const &b2 = a;//权限缩小
const &b3 = a2;//没有放大也没有缩小


4.引用做参数和引用做返回值

  • 引用传参可以提高效率,节省空间。(不希望被改变时使用const 引用传参就不能被改变,不但节省空间而且更加安全)
  • 引用做返回值时要特别注意:不要返回一个临时变量的引用,临时变量出了作用域就被销毁了,再使用这个临时变量的引用就是未定义行为。

int &Add(int a,int b)
{
    int c = a+b;
    return c;
}

int main()
{
   int &ret = Add(1,2);//错误!!!返回了临时变量的引用!!!
}
当出了函数作用域,这个变量还依然存在多使用(特别是变量很大时)引用返回可减少空间的开辟。

5.引用和指针的区别

  • 引用不能为空,一旦创建必须被初始化;指针可以为空,可以在任何时候被初始化。
  • 一个引用只能是一个变量的“别名”,不能改变为另一个对象的引用;指针可以任意指向另一个对象。
  • sizeof(引用)得到的是被引用的变量的大小;sizeof(指针)得到的是指针本身的大小。
  • 引用在使用时不需要解引用,指针则需要。引用和指针的自增

6.从汇编看传值返回和传引用返回


传值返回最后是将ret内的值放入eax寄存器中,传引用返回时将ret的地址放入eax寄存器中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值