C++ move()函数:将左值转换为右值
移动构造函数是通过右值引用实现的,对于左值,也可以将其转化为右值,实现程序的性能优化。
C++11 在标准库 utility 中提供了
move() 函数的用法示例代码如下所示:
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
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() 函数完成对象之间的初始化,以避免没有意义的深拷贝。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。