首页 > 编程笔记

C++ move()函数:将左值转换为右值

移动构造函数是通过右值引用实现的,对于左值,也可以将其转化为右值,实现程序的性能优化。

C++11 在标准库 utility 中提供了move() 函数,该函数的功能就是将一个左值强制转换为右值,以便可以通过右值引用使用该值。

move() 函数的用法示例代码如下所示:
int x = 10;
int&& r = move(x);   //将左值强制转换为右值
在上述代码中,move() 函数将左值 x 强制转换为右值,赋值给右值引用 r。

如果类中有指针或者动态数组成员,在对象被拷贝或赋值时,可以直接调用 move() 函数将对象转换为右值,去初始化另一个对象。使用右值进行初始化,调用的是移动构造函数,而不是拷贝构造函数,这样就可以避免大量数据的拷贝,能够极大地提高程序的运行效率。

例如,如果使用左值对象初始化另一个对象,则会调用拷贝构造函数,示例代码如下所示:
A a(100);
A b(a);   //对象a是左值,调用拷贝构造函数
但是,如果将对象 a 转换为右值,则会调用移动构造函数,示例代码如下所示:
A a(100);
A c(move(a));   //对象a被转换为右值,调用移动构造函数
当对象内部有较大的堆内存数据时,应当定义移动构造函数,并使用 move() 函数完成对象之间的初始化,以避免没有意义的深拷贝。

优秀文章