lvalue & rvalue
rvalue举例
#include <string>
using namespace std;
int getValue()
{
return 100;
}
int main()
{
int a = 10;
int b = getValue();
string firstname = "Wu";
string lastname = "Jun";
string fullname = firstname + lastname;
}
这段代码中等号右侧的都是rvalue(等号右侧并非一定是lvalue,也可以是lvalue)
规则一:不能把lvalue赋值给rvalue
int a,b;
10 = a; // error
int getValue() {return 10;}
getValue = 0; // error
a + b = a; // error
规则二:不能创建对rvalue的nonconst lvalue reference,但可以创建对rvalue的const lvalue reference
int& a = 10; // error
const int& a = 10; // fine
void func1(int& t) {}
void func2(const int& t) {}
func1(10); // error
func2(10); // fine
规则三:可以对rvalue创建rvalue reference
void func(int&& t) {}
func(10); // fine
const lvalue reference也行,但是右值引用的好处是可以充分利用这个空闲的内存空间
move
参考这篇文章