最近好好研究了一下 C++ 中的移动语义。
左值 & 右值
已经在内存中分配了地址的、可以取到地址的,是左值。
在内存中未分配地址的、仅存在于寄存器中、无法取到地址的,是右值。
int a = 8; // a 已分配内存,是左值。
a + 1; // a + 1 仅存在于寄存器中,是右值。
右值引用
T&&
是右值引用,只接受右值:
int&& a = 8; // 正确,8 仅存在于寄存器中。
int v = 9;
int&& b = v; // 错误,v 是左值,无法存入右值引用。
int&& c = v + 3; // 正确,v + 3 的结果仅存在于寄存器中,是右值,可以存入右值引用。