C++0x 右辺値参照 オーバーロードを実験

(左辺値)参照と右辺値参照はオーバーロードできるが
オーバーロードせずに右辺値参照の処理だけ書いたらどうなるか試してみた


右辺値参照だけ書けば左辺値も処理できるようだ

#include <iostream>

using namespace std;

struct person {
    int age;
    string name;

    person(int age, const string& name)
        : age(age), name(name) {}
};


void foo(person&& x) {} // 左辺値も右辺値として処理する

int main()
{
    foo(person(22, "Akira")); // OK

    person johnny(38, "Johnny");
    foo(johnny); // OK...ここでjohnnyオブジェクトが破壊されたりしないよなー

    cout << johnny.name << endl; // 8...使えるつかえる

    return 0;
}

左辺値を右辺値参照の引数に渡すと、元のオブジェクトは破壊されないようだ
(当然か・・・)


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

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