11

multimap に関する MSDN ドキュメントを表示していたところ、メンバー関数 multimap::emplace() があることがわかりました。以下は、そのメンバー関数の例です。

int main( ) {
   using namespace std;
   multimap<int, string> m1;
   pair<int, string> is1(1, "a");

   m1.emplace(move(is1));
}

emplace()move()は C++0x のようです。誰かが私のためにそれらを説明できますか? について読みましmove()たが、それが何をするのか(ボンネットの下で)本当にわかりません。

4

1 に答える 1

16

ベクトルを使用すると、埋め込みが理解しやすくなります。my_vector.emplace_back(1, 2, 3)基本的にはの効率的なショートカットですmy_vector.push_back(some_type(1, 2, 3))。オブジェクトをインプレースでコピー構築する代わりに、任意のコンストラクターをインプレース構築に使用できるようになりました。これにより、一時オブジェクトの作成、コピー(または移動)、および破棄を節約できます。エンプラシングは完全な転送によって強化されています。

std::move(expression)基本的にはxvalueへのキャストであり、これにより、式全体を右辺値参照に効果的にバインドできます。通常、これを行うのは、とにかくすぐに破棄されるため、関心がなくなった名前付きオブジェクトからのリソースの盗用を有効にするためです。

于 2011-03-29T10:06:16.177 に答える