スピードをお求めですか?値による受け渡し: パフォーマンスに関する考慮事項
「速度が必要ですか? 値による受け渡し」の原則は、値による引数の受け渡しがコピー省略によりパフォーマンスを向上させる場合があることを示唆しています。説明のために、クラス X と Y を使用した次のコードを考えてみましょう。
<code class="cpp">struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} }; int main() { X(foo()); Y(foo()); }</code>
ここで、foo() は X と Y の両方のコンストラクターに渡される一時文字列を返します。 X が mem_name を初期化するとき、std::string の move コンストラクターを呼び出します。これにより、文字列のコピーが回避される可能性があります。ただし、Y が mem_name を初期化するときは、文字列参照をコピーする必要があります。
左辺値と右辺値の引数:
左辺値 (一時的ではない) が渡される場合、両方の XそしてYはコピーを実行します。さらに、X が移動を実行します。右辺値 (一時値) の場合、X は移動のみを実行できますが、Y はコピーを実行する必要があります。
パフォーマンスへの影響:
一般に、移動は渡すよりも高速です。ポインター (参照渡しと同等)。したがって、X は左辺値では Y と同様のパフォーマンスを持ち、右辺値ではより優れたパフォーマンスを示します。
注意:
「速度が必要ですか? 値による受け渡し」は説得力のあるアイデアですが、それは慎重に適用されるべきです。大規模なデータ構造のコピーに関連する特定のコンテキストと潜在的なオーバーヘッドを考慮することが重要です。実際のパフォーマンスへの影響を判断するには、プロファイリングをお勧めします。
追加リソース:
以上がスピードが欲しいですか? Pass By Value: Copy Elision は常にパフォーマンスの勝者ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。