左值右值
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 }
以上是关于左值右值的主要内容,如果未能解决你的问题,请参考以下文章