最適化のためのパラメーター受け渡し規則のオーバーホール
最近の講演で、Herb Sutter は std::vector オブジェクトと std::string オブジェクトを渡すことを提案しました。 const & によるものは時代遅れになりつつあります。この主張はプログラマの間で議論を引き起こしました。
Sutter の理論的根拠
Sutter は、関数が右辺値 (つまり、一時オブジェクト) を返す場合、入力を渡すと主張しています。値によるパラメーターにより、移動セマンティクスを使用したより効率的な処理が可能になります。これにより、不必要なコピーやメモリ割り当てが回避されます。
次のコード スニペットを検討してください。
std::string do_something ( std::string inval ) { std::string return_val; // ... do stuff ... return return_val; }
inval を値で渡すと、関数が値を直接変更して返すことができるため、コピーの必要がなくなります。コンストラクター。
に関する懸念事項効率
批評家は、std::string のような大きなオブジェクトを値で渡すことは、オブジェクトの移動に伴うオーバーヘッドのため依然として非効率である可能性があると主張しています。 std::string インスタンスは、ヒープ ポインターや短い文字列最適化のためのメンバー char[] など、いくつかのコンポーネントで構成されます。
参照パラメータの引数
非効率性の可能性があるため、参照パラメータの支持者は、参照パラメータにはいくつかの利点があると主張しています。利点:
結論
オブジェクトを const & で渡すか値で渡すかの選択は、特定の使用例によって異なります。効率が重要であり、関数が右辺値で動作する状況では、移動セマンティクスを使用して値を渡すとパフォーマンス上の利点が得られます。ただし、カプセル化、簡素化、または所有権管理が重要な場合には、参照パラメータは依然として価値があります。
以上がそれでも `std::string` と `std::vector` を `const &` で渡す必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。