C++11开始引入了std::move,引入std::move主要是为了优化对象的生命周期,以及优化函数参数传递方式。然后又引入了一个右值得概念, 之前又有一个左值得概念。左值和右值网上特别多,这里把这些理解汇总下。
左值和右值
左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
变量可以取地址,所以是左值,但是常量和临时对象等不可以取地址,所以是右值。
左值是表达式结束后依然存在的持久对象(代表一个在内存中占有确定位置的对象)。
右值是表达式结束时不再存在的临时对象(不在内存中占有确定位置的表达式)。
便携方法:对表达式取地址,如果能,则为左值,否则为右值。
左值引用右值引用
左值引用的声明符号为&,右值引用的声明符号为&&。
右值引用是用来支持转移语义的。
右值引用,用以引用一个右值,可以延长右值的生命期,比如:
std::moveint&& i = 123; int&& j = std::move(i); int&& k = i;//编译不过,这里i是一个左值,右值引用只能引用右值
C++ move是为了转移所有权,将快要销毁的对象转移给其他变量,这样可以继续使用这个对象,而不必再创建一个一样的对象。省去了创建新的一样内容的对象,也就提高了性能。对于某些资源来说,可以改变所有者,但是只能有一份,move也解决这样的对象的管理问题。
什么是move?
C++中的std::move函数到底是做什么的?
C++ 之 std::move
关于 std::move
一文带你详细介绍c++中的std::move函数
c++11特性之std-move的使用和原理
C++右值引用(std::move)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)