Skip to content

Latest commit

 

History

History
93 lines (71 loc) · 2.52 KB

move.md

File metadata and controls

93 lines (71 loc) · 2.52 KB

move (utility)

  • utility[meta header]
  • std[meta namespace]
  • function template[meta id-type]
  • cpp11[meta cpp]
namespace std {
  template <class T>
  typename remove_reference<T>::type&& move(T&& t) noexcept; // C++11

  template <class T>
  constexpr typename remove_reference<T>::type&& move(T&& t) noexcept; // C++14
}
  • remove_reference[link /reference/type_traits/remove_reference.md]

概要

左辺値を右辺値にキャストする。

この関数は、渡されたオブジェクトを右辺値参照にキャストし、ムーブセマンティクスを適用させる。

戻り値

static_cast<typename std::remove_reference<T>::type &&>(t)
  • std::remove_reference[link /reference/type_traits/remove_reference.md]

例外

投げない

#include <iostream>
#include <utility>

struct A {
  A() {}

  // 左辺値からコピー
  A(const A&)
  {
    std::cout << "copy" << std::endl;
  }

  // 右辺値からムーブ
  A(A &&)
  {
    std::cout << "move" << std::endl;
  }
};

int main()
{
  A a;
  A a1 = a;             // A(const A&)が呼ばれる
  A a2 = std::move(a);  // A(A&&)が呼ばれる
}
  • std::move[color ff0000]

出力

copy
move

上記のa1の初期化において、aは左辺値なので、コンストラクタA(const A&)が呼び出され、a1aからコピーされる。a2の初期化においては、std::move(a)呼び出しのため、コンストラクタA(A&&)が呼ばれ、a2aからムーブされる。

バージョン

言語

  • C++11

処理系

参照