2

基本的な方法を仮定します:

std::string StringTest()
{
    std::string hello_world("Testing...");

    return std::move(hello_world);
}

出力の使用方法:

オプション A:

auto& string_test_output=StringTest();

オプション B:

auto string_test_output=StringTest();

StringTest() は一時的な値ですか? もしそうなら、オプション A は安全ではありません。一時的な値でなければ、オプション B でコピーが発生するような気がします。

私はまだ RValue 参照に慣れているので、コピーが発生したり、不要なコピーが発生したりしたくないので、値で返すことはまだ非常に怖いです!

4

2 に答える 2

0

値によって std::string (および一般的にはすべての移動可能な型) を返し、新しいオブジェクトを初期化しても、コピーの構築がトリガーされることはありません。最悪の場合、移動の構築がトリガーされますが、通常はコピーの省略が原因で、実行時のオーバーヘッドは発生しません。

値のセマンティクスとそのコストの背景については、この記事をお勧めします。

于 2013-04-05T08:03:36.917 に答える