読者です 読者をやめる 読者になる 読者になる

C++0x 右辺値参照 std::move

C++0xではにstd::moveという関数が追加される

namespace std {
    template <class T>
    inline typename remove_reference<T>::type&& move(T&& x)
    {
        return x;
    }
}

これは、左辺値(もしくは右辺値)を右辺値に変換するための関数である

class person {
public:
    person() {}
    person(person&&) {}

private:
    person(const person&);
};

int main()
{
    person p1;
    person p2 = std::move(p1); // OK...person(person&&);

    return 0;
}


Cry's Diary - 右辺値参照型と左辺値参照型
にあるように、名前が付いたオブジェクトは左辺値として扱われるので
以下のように右辺値参照したオブジェクトのメンバを移動するのにも使用する

class person {
    int age;
    string name;
public:
    person(person&& other)
        : age(std::move(other.age)), name(std::move(other.name)) {}
};

N2027 - A Brief Introduction to Rvalue References

右辺値参照・ムーブセマンティクス

C++0x言語拡張まとめ