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

来源:互联网 发布:网络流行歌曲大全 编辑:程序博客网 时间:2024/05/16 15:31
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
原创粉丝点击