しばらくしてから、C++ では値の意味論が非常に重要であるということをよく耳にします (つまり、 hereとhere )。とにかく関数の本体内の値をコピーする場合は特に、これを使用する必要があることを知っています。したがって、そのような使用法は公正であると思います。
void foo(std::string txt) { my_container.emplace_back(move(txt)); }
ただし、大きなプロジェクトで時々発生する大きな関数ツリーを介してその引数を渡す必要がある場合の推奨事項は見つかりませんでした。たとえば、次のようになります。
void bar(std::string txt) { foo(move(txt)); /* more actions */ }
void boo(std::string txt) { bar(move(txt)); /* more actions */ }
そのような場合、誰かが何をすべきかをお勧めできますか? 値のセマンティクスにとどまり、コンパイラ オプティマイザーが移動操作の数を制限したり、あらゆる場所で const 参照を使用したり、最後に 1 つのコピーしか使用したりできないことを期待する必要がありますか? それとも、C++ の多くの場合と同様に、依存します (つまり、特定の型のコピーと移動のコスト)? :-)