• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function template
    <utility>

    std::move (utility)

    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

    処理系

    参照