2

重複の可能性:
C ++では、値を渡すか、定数参照を渡す方が良いですか?

ファイルシステムを書いているときにこれについて考えました。

vector<string> getFiles(string path);
vector<string> getFiles(const string& path);

どれが速いですか?どれがよりエレガントですか?

明らかに、メソッドpathで変更されることはありません。getFiles

ボーナス:私はC++11を使用しています。移動セマンティクスがすべてを高速化する方法はありますか?

4

3 に答える 3

5

黄金律:

「デフォルトでは常に const 参照で渡します。」

これは、関数の引数を渡すときのデフォルトの選択です。状況に応じて他のオプションを選択しました。

  • カスタムクラスの方が常に効率的です。
  • ユーザーにとってより直感的です。
于 2013-01-12T17:44:56.030 に答える
4

あなたの状況での標準的な答えは、const&パフォーマンス上の理由 (文字列のコピーを回避することが保証されています) と、意図を文書化するための両方で、 によって引数を渡すことです。前者は、コードをプロファイリングし、文字列を渡すことがボトルネックであると判断した場合にのみ重要です。そうでない場合は、パフォーマンスに大きな違いをもたらすのではなく、主に「ベスト プラクティス」を見ていることになります。

ただし、私にとっては、関数の署名を見ると、2番目のものは「パラメーターを読み取るだけで何もしません」と明確に述べていますが、最初のものはパラメーターに対して何かをしているとかなり述べていますただし、パラメータのコピーで作業しているため、変更内容は外部からは見えません。

また、引数を const 参照で渡すと、メモリの割り当てが回避されるという追加の利点もあります。これは、無限のメモリ (つまり、すべて) を持たないシステムで作業している場合に便利です。

于 2013-01-12T17:47:51.283 に答える
1

by-value パラメーターを使用したほうがよいでしょう。この投稿を参照してください。速度が必要ですか? 詳細な理由により、 Value で渡します。基本的に、関数を呼び出す方法について、呼び出し元やコンパイラに柔軟性を与えます。Usingconst&は、C++98 のベスト プラクティスであったものを強制しますが、C++11 の移動セマンティクスに反する可能性があります。

于 2013-01-12T17:47:30.820 に答える