[TOC]

概述

概述

想要了解C++11特性里面的move函数的使用和原理,我们先要了解一下左值和右值

左值和右值

左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。

一般来说,变量可以取地址,所以是左值,但是常量和临时对象等不可以取地址,所以是右值。

左值的声明符号为&,右值的声明符号为&&。

我们可能在各种场合(初始化,push_back,函数返回等)调用拷贝构造函数将一个临时对象初始化给另一个对象,而这时如果是深拷贝则代价会比较大。

深拷贝对程序的影响比较大,把临时对象的内容直接移动(move)给被赋值的左值对象,效率改善将是显著的。这就产生了移动语义,右值引用是用来支持转移语义的