C++ 里的表达式有左值和右值的概念。

可以引用到其地址的都是左值类型。

虽然字面量属于纯右值,但有唯一例外:字符串字面量是左值类型。

引用就是绑定关系,使表达式可以使用具体的名称来引用。

左值引用,就是一般的引用,相当于起了一个别名:

右值引用,也是绑定关系,但和左值的绑定有一点区别:是把右值使用移动的方式绑定到变量上。

C++ 有一个规定:凡具名者皆是左值:

在使用循环枚举 STL 容器内容时,使用引用可以避免发生拷贝:

当 std::vector 存储的数据类型是 bool 时,它内部会使用位(bit)来存储,而不是为每个元素创建空间,这样做是为了节约内存而且提高存取速度。

这个时候返回的是右值,准确的说是将亡值,使用 auto & 指向右值是不对的。

因为右值引用可以绑定将亡值(xvalue),并且不需要 const 限定符。

所以在循环中更通用的写法就诞生了:auto &&。

版权声明:如果转发请带上本文链接和注明来源。