C での値渡しの再考 11
C の世界では、大規模なアプリケーションでは伝統的に値渡しが推奨されていません。パフォーマンス上の懸念からオブジェクトを削除します。ただし、C 11 での右辺値参照と移動コンストラクターの導入により、オブジェクトを効率的に渡すための新しい可能性が開かれています。
値による受け渡しが最適なデフォルトですか?
業界専門家の Dave Abrahams 氏によると、次のような場合には std::vector や std::string のような大きなオブジェクトを値で渡すのが合理的です。関数本体内でコピーを作成する必要があります。これにより、コンパイラが最適化を実行できるようになり、プログラマによる明示的なコピーの必要がなくなります。
利点:
カスタム オブジェクト:
カスタム オブジェクトの場合、const への参照渡しは引き続き使用されます。柔軟性があり、元のファイルを意図せず変更してしまうリスクを最小限に抑えることができるため、実行可能なオプションです。 object.
ベスト プラクティス:
例:
推奨パターンを実装するには、値付きコンストラクターを次のように記述できます。
class T { U u; V v; public: T(U u, V v) : u(std::move(u)) , v(std::move(v)) {} };
以上が最新の C では、値渡しをラージ オブジェクトのデフォルトにする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。