1.引入问题
? ? ? ? ? 在我们浏览别人代码时经常发现有这种函数 void func(int& info);或者 void fun(int && info);? 有些人一眼或许猜是地址,是地址的地址,这样并不全面,如果想全面了解就要认识左值?和?右值!!
2.什么是左值和右值(认识左值右值)?
int x = 10;? ????????????????? ????????x代表非常量左值,10代表非常量右值
const int y?= 5;? ? ? ? ? ? ? ? ? ? y代表常量左值,5代表非常量右值
int& z ;? ??????? ? ? ? ? ? ? ? ? ? ? ? z代表非常量左值,
int &&m;? ? ? ? ? ? ? ?????????? ? ? m代表非常量右值
总的来说左值就是有实际地址可以赋值操作,而右值不可行!!
3. 传参时左值右值区别和限制关系!!
int func(int &a);? ? ? ? 非常量左值只能接受非常量左值比如int& x;
int func(int &&a)? ? ? ? 非常量右值只能接受非常量右值传参比如 30;
int func(const int& x) ????????常量左值是万能引用传参 【还有一个是类模板的万能引用传参具体自己查资料吧】
4.传参过后变成了什么?
int &x = 6;
func(int& x) {cout<<"x"<<endl;}
输出为6
意思是不管是左值传参还是右值传参不要过分纠结是几个&符号,具体还要看是左值右值,传进来后变量名就是实际的值!!关于多个&符号读者可以选择查阅引用折叠
|