标签:例子 pac ret std col 出现 ace sys from
FROM : https://blog.csdn.net/xuyuqingfeng953/article/details/51058236
本文仅限自己使用
左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;
右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。
一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。
引用是C++语法做的优化,引用的本质还是靠指针来实现的。引用相当于变量的别名。
引用可以改变指针的指向,还可以改变指针所指向的值。
引用的基本规则:
3.1 左值引用
左值引用的基本语法:type &引用名 = 左值表达式;
3.2 右值引用
右值引用的基本语法type &&引用名 = 右值表达式;
右值引用在企业开发人员在代码优化方面会经常用到。
右值引用的“&&”中间不可以有空格。
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 cout << "-------引用左值--------" << endl; 7 int a = 5; 8 int &add_a(a); 9 10 cout << " a =" << a <<" "<<" &a = "<<&a<< endl; 11 cout << "add_a =" << add_a<<" "<< "&add_a = " << &add_a << endl; 12 cout << "-----------------------" << endl; 13 14 cout << "-------引用右值--------" << endl; 15 int b = 10; 16 int &&add_b(b + 1); 17 cout << " b =" << b << " " << " &b = " << &b << endl; 18 cout << "add_b =" << add_b << " " << "&add_b = " << &add_b << endl; 19 add_b++; 20 cout << "add_b++ =" << add_b << " " << "&add_b++ = " << &add_b << endl; 21 cout << "-----------------------" << endl; 22 23 system("pause"); 24 return 0; 25 }
运行结果:
其实对于左值还是很好理解的,主要是对于右值是不好理解的,特别是代码的16行处:右值的例子。C++之所以设计出右值引用的语法,主要是因为对于类似b+1;这样的运算是发生在CPU寄存器上的,就不能对其取地址、赋值等操作,所以这类运算只能放在等号的右边,将其赋给其他的变量。若等号右边出现:&b,这样的操作是,也是右值,因为取地址符的操作也是在寄存器中完成的。所以不能作为左值。
学习笔记:
左值与右值
int num1(5);
int num2(10);
int *pnum(&num1);//&num1在寄存器
int * & rpnum = pnum;//引用左值
//rpnum = &num2;//引用可以改变指针的指向
//*rpnum = 100;//引用还可以改变指针的值
int * && rpnum = &num1;//引用右值,&& 中间不可以有空格 C++语法 企业开发中内存优化中使用 CPU中经常用
int *p = rpnum;//用于对象拷贝
//改变外部变量,需要地址或者引用
//左值引用是用指针实现的。
标签:例子 pac ret std col 出现 ace sys from
原文地址:https://www.cnblogs.com/rainbow-xiaojian/p/9062500.html