Skip to content

Latest commit

 

History

History
76 lines (55 loc) · 1.41 KB

move.md

File metadata and controls

76 lines (55 loc) · 1.41 KB

#move (utility)

namespace std {
  template <class T>
  typename remove_reference<T>::type && move(T&& t) noexcept;
}

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

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

##戻り値 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&&)が呼ばれる
}
  • move[color ff0000]

###出力

copy
move

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

##バージョン ###言語

  • C++11

###処理系

##参照