質問

次のC ++標準に来ることを約あるR-値の参照は何ですか?

役に立ちましたか?

解決 3

ここでは本当に長い<のhref = "http://blogs.msdn.com/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2です.aspxの」REL = "nofollowをnoreferrer">ステファンT. Lavavej

から記事

他のヒント

C ++ 0xのが右辺値参照されないのはなぜを見てみましょうデフォルトですか、かなりよく彼らの実用的な使用方法について説明します。

それはR値またはL値への参照を渡すことができ呼び出したコードを区別することを可能にします。たとえばます:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

R値の基準を使用することにより、我々は、上記の最初の例のように一時への参照に通過させることができます:

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

これは、我々がそのオブジェクトを使用して別の関数にオブジェクトを作成する関数の戻り値を渡したいと思っているときに、より興味深いものです。

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

ムーブコンストラクタはコピーコンストラクタのように動作し、R値の基準ではなくL値(定数)基準を取るように定義されています。これは、ベクトル内のすべてのデータの高価なコピーを行わずcreate_vectorする引数にconsume_vectorで作成した一時の外にデータを移動し、それらをプッシュするr値のセマンティクスを使用することが許可されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top