c++ std::move

std::move
通常,rvalues是无法通过解除引用来获取其地址的值,因为它们是文字或因为它们本质上是临时的(例如函数或显式构造函数调用返回的值)。 通过将对象传递给此函数,可以获得引用它的rvalue。

标准库的许多组件实现移动语义,允许直接转移对象的资产和属性的所有权,而无需在参数为右值时复制它们。

虽然注意到移动意味着移动的对象保持有效但未指定的状态。 这意味着,在这样的操作之后,移动对象的值应该只被销毁或分配一个新值; 访问它否则会产生一个未指定的值。

看下面一个例子:

// move example
#include <utility>      // std::move
#include <iostream>     // std::cout
#include <vector>       // std::vector
#include <string>       // std::string

int main () {
  std::string foo = "foo-string";
  std::string bar = "bar-string";
  std::vector<std::string> myvector;

  myvector.push_back (foo);                    // copies
  myvector.push_back (std::move(bar));         // moves

  std::cout << "myvector contains:";
  for (std::string& x:myvector) std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

输出:
myvector contains: foo-string bar-string

猜你喜欢

转载自blog.csdn.net/TH_NUM/article/details/81215194