cpp值类别
内容简介
值类别用于描述表达式的性质,例如它是否有稳定身份、能否被移动、能否绑定到某种引用。理解值类别是理解右值引用、移动语义和完美转发的前提。
基础阶段先掌握两个直觉:
- 左值:有名字、可取地址、能反复使用的对象。
- 右值:临时结果,通常可以被移动。
常见例子
int x = 10; // x 是左值
int y = x + 1; // x + 1 是右值std::string make_name();
std::string a = make_name(); // make_name() 的结果是临时对象和引用的关系
int x = 10;
int& r1 = x; // 左值引用绑定左值
const int& r2 = 10; // const 左值引用可以绑定临时对象
int&& r3 = 10; // 右值引用绑定右值易错点
int&& r = 10;
// r 本身有名字,所以表达式 r 是左值这也是完美转发里需要 std::forward 的原因。