ホームページ > バックエンド開発 > C++ > それでも `std::string` と `std::vector` を `const &` で渡す必要がありますか?

それでも `std::string` と `std::vector` を `const &` で渡す必要がありますか?

Barbara Streisand
リリース: 2024-12-10 13:54:11
オリジナル
1014 人が閲覧しました

Should We Still Pass `std::string` and `std::vector` by `const &`?

最適化のためのパラメーター受け渡し規則のオーバーホール

最近の講演で、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート