次のC ++標準に来ることを約あるR-値の参照とは何ですか?
-
21-08-2019 - |
質問
次の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値のセマンティクスを使用することが許可されます。
所属していません StackOverflow