最終更新日時:
が更新

履歴 編集

function template
<utility>

std::move (utility)(C++11)

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
}

概要

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

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

戻り値

static_cast<typename std::remove_reference<T>::type &&>(t)

例外

投げない

#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&&)が呼ばれる
}

出力

copy
move

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

バージョン

言語

  • C++11

処理系

参照