左值和右值的定义以及区别:
先来看在C语言中的左值和右值 :
左值:可赋值的值为左值
右值:不可赋值的值为右值
再来看C++中左值右值的定义如下:
左值:可以取地址的值(有名字的值、非临时量)
右值:不可取地址的值(没有名字的值、临时量)
左值引用:
int a = 10; //整型a = 10
int& b = a; //可以编译通过 左值引用就相当于变量的别名
const int a = 10; //左值引用字面常量的时候 改为常引用const就可以引用了
//左值引用要求右值必须能够取地址,如果不能取地址,则必须为常引用
右值引用:
int&& a = 10; //字面常量10为纯右值,可以编译通过
int&& b = a; //不可以编译通过 因为a是字面常量10的右值引用 a以及有名字了
说完了上面的定义来看下面这些代码:
//我们下面的String是一个了类
String fun()
{
String s2("hello");
return s2;
}
String & fun()
{
String s2("hello