std::move的理解

std::move的理解,第1张

std::move的理解 std::move

C++11开始引入了std::move,引入std::move主要是为了优化对象的生命周期,以及优化函数参数传递方式。然后又引入了一个右值得概念, 之前又有一个左值得概念。左值和右值网上特别多,这里把这些理解汇总下。

左值和右值

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

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

左值是表达式结束后依然存在的持久对象(代表一个在内存中占有确定位置的对象)。

右值是表达式结束时不再存在的临时对象(不在内存中占有确定位置的表达式)。

便携方法:对表达式取地址,如果能,则为左值,否则为右值。

左值引用右值引用

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

右值引用是用来支持转移语义的。

右值引用,用以引用一个右值,可以延长右值的生命期,比如:

int&& i = 123;
int&& j = std::move(i);
int&& k = i;//编译不过,这里i是一个左值,右值引用只能引用右值
std::move

C++ move是为了转移所有权,将快要销毁的对象转移给其他变量,这样可以继续使用这个对象,而不必再创建一个一样的对象。省去了创建新的一样内容的对象,也就提高了性能。对于某些资源来说,可以改变所有者,但是只能有一份,move也解决这样的对象的管理问题。

什么是move?

C++中的std::move函数到底是做什么的?

C++ 之 std::move

关于 std::move

一文带你详细介绍c++中的std::move函数

c++11特性之std-move的使用和原理

C++右值引用(std::move)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存