6

いくつかの文字列を 1 つにマージする必要があり、効率的な理由から、この状況ではムーブ セマンティックを使用したいと考えています (もちろん、これらの文字列はもう使用されません)。だから私は試しました

#include <iostream>
#include <algorithm>
#include <string>

int main()
{
    std::string hello("Hello, ");
    std::string world("World!");
    hello.append(std::move(world));
    std::cout << hello << std::endl;
    std::cout << world << std::endl;
    return 0;
}

私はそれが出力されると思いました

Hello, World!
## NOTHING ##

しかし、実際には出力されました

Hello, World!
World!

に置き換えても同じ結果になりappendますoperator+=。それを行う適切な方法は何ですか?

debian 6.10でg ++ 4.7.1を使用しています

4

1 に答える 1

10

を別の の一部stringに移動することはできません。そのためには、newに 2 つのストレージ バッファー (現在のバッファーと新しいバッファー) を効果的に持たせる必要があります。そして、C++ 1 では連続したメモリを必要とするため、魔法のようにこれをすべて連続させる必要があります。stringstringstd::string

要するに、できません。

于 2012-10-31T03:04:18.773 に答える