对于引用的理解:
- ①引用绑定:其实定义一个引用的形参比如int& a作为函数参数,在实际调用中传入的是一个内存区域(左值),在进入函数的时候,进行了一次引用绑定,即将a这个引用(可以把引用也理解成一种类型,除了指针、变量之外,还有引用类型)绑定到了那个左值。这只是一个左值引用例子,其实引用分为右值引用和左值引用。 右值引用相对于左值引用的区别是:右值是一个会被释放的值,如果不将右值绑定到一个右值引用,那么右值用完就自动销毁了。而左值是一个内存空间,不管引不引用,都是存在的。表述方式:左值:int& a,右值:int&& a,多一个&而已。
- ②引用折叠:函数的形参和实参可能是分别是以下几种情况:左值,右值,左值引用,右值引用,那如果入参和形参类型一致,那么没什么好说的,直接就传入函数了,如果类型不一致,会进行隐式转换,这里只说引用的转换:&+&仍然是左值引用&+&&=&,还是左值引用,&&+&=&仍然是左值引用,只有&&+&&=&&只有这种情况是右值。即左值优先的原则。