C++ 引用 左值引用 右值引用

c语言没有引用
c++有引用
引用的产生:如果改变一个一级指针,需要一个二级指针,改变一个二级指针
需要一个三级指针,比较麻烦,就出来了引用

右值:在寄存器内,无法去地址
左值:可以&
右值引用&& 只能绑定在一个左值上(有一个例外)
左值引用 & 只能绑定在一个右值上(有一个例外)

左值引用
int a=1;
int & aa =a;//左值引用



(例外)左值引用绑定在一个右值上 用const修饰
int i=10;
const int &r3=i*10;

int a=1;
int &&a1 =++a;++a的作用机理是在原数据a上直接加1,最终返回的是原来的那个对象(只不过值加了1),因此++a为左值

int a = 10;
int* && aa = &a;
int *aaa = &a;
int * &a =aaa; //左值引用


右值引用
int a=1;
int *&&aaa =&a;//这里的&是引用 &&右值引用

(例外)右值引用绑定在一个左值上
int i=10;
int &&ii =std::move(i);

int a=1;
int &a1 =a++;a++的作用机理是先将a的值拷贝到一个临时变量中,然后将这里临时变量加1,最终返回的是这个临时变量,因此a++为右值。
----------------------------------------------------------------------------------
引用数组
int i[3] = { 1,2,3 };
int(&a)[3](i);

引用函数指针
int jia(int a,int b){
return a+b;
}
int(* p)(int a,int b)(jia);
int(* &pr)(int a,int b)(p);

引用改变函数指针指向
int jia(int a,int b){
return a+b;
}
int(* p)(int a,int b)(jia);
int(* &pr)(int a,int b)(p);
pr=jian;
函数指针引用作为参数和返回指针引用
int(*& change(int (*&rp)(int,int))(int,int)){
rp =jian;
return rp;
}
右值引用作为参数
int get(int&&a){
a+=10;
return a;
}
int a =1;
get(a+1);


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值