左值右值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左值右值相关的知识,希望对你有一定的参考价值。

左值就是可以放在赋值号左边赋值的,必须要在内存有实体

右值就是可以放在赋值号右边取出值赋给其他变量的值,可以在内存,也可以在CPU

 

引用说明为对象建立引用名,即别名

引用在定义初始化时与对象名绑定,程序中不能对引用重定义

一个对象的别名,从使用方式和效果上,与使用对象名一致

定义形式:类型&引用名=对象名;

 

//引用可以改变指针的指向

//引用可以改变指针指向的值

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     int num1(5);
 7     int num2(10);
 8 
 9     int *pnum(&num1);
10 
11     int * & rpnum = pnum;//引用可以改变指针的指向
12 
13     *rpnum = 100;//引用可以改变指针指向的值
14 
15     rpnum = &num2;
16 
17     std::cout << *pnum << std::endl;//10
18 
19     system("pause");
20 }

 

//引用右值,一般用于企业开发,内存优化

//用于对象拷贝

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     int num1(5);
 7     int num2(10);
 8 
 9     int * && rpnum = &num1;//引用右值,一般用于企业开发,内存优化
10 
11     int *p = rpnum;//用于对象拷贝
12 
13     system("pause");
14 }

 

//指针与引用

int a;

int * pa;

int & ra=a;

pa=&a;

 

改变外部变量,需要地址或者引用

左值引用是用指针实现的

 

返回引用的函数

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int & get()
 5 {
 6     int a = 10;//a在栈上
 7     int & ra = a;
 8 
 9     std::cout << "&a=" << &a << std::endl;
10 
11     return ra;
12 }
13 
14 void main()
15 {
16     int & ra = get();
17 
18     std::cout << ra << std::endl;
19 
20     std::cout << "ABCD" << std::endl;
21 
22     std::cout << ra << std::endl;
23     
24     system("pause");
25 }

 

&左值引用

&&右值引用

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     int a = 10;
 7 
 8     int & ra = a;//&左值引用
 9 
10     int * && pa = &a;//&&右值引用
11 
12     //int * & & pa1 = &a;//右值引用,不能分开写
13     
14     system("pause");
15 }

 

以上是关于左值右值的主要内容,如果未能解决你的问题,请参考以下文章

左值右值右值引用与move()forward()

左值左值引用右值右值引用

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

C++11:左值右值左值引用右值引用

C++11:左值右值左值引用右值引用

c++11:左值右值