1
//move the element
void StrVec::push_back(string &&s)
{
    chk_n_alloc();
    alloc.constructor(first_free++,std::move(s));
}

alloc は allocator のオブジェクトです。chk_n_alloc() は気にしないでください。sが既に右辺値であることを知りたいのですが、なぜ std::move を呼び出してsをコンストラクターに渡す必要があるのでしょうか? コードは C++ 入門書 5th p545 からのものです。

4

1 に答える 1

2

これはトリッキーな状況でsあり、右辺値参照として渡されますが、名前を付けると左辺値であるため、移動する必要があります。これは、右辺値参照へのキャストにすぎません。これは、引数を右辺値参照として使用する必要があることを意味します。これは、非一時的な値が渡されないようにするためです (それらが移動されない限り)。

于 2013-10-30T05:16:58.367 に答える