2

重複の可能性:
C ++:パラメーターをrefまたはvalueのどちらで渡すかを決定するにはどうすればよいですか?

次の関数は、C ++ Primer、5th Editionの211ページと214ページから作成されました。この関数は、文字列内の特定の文字の最初の出現位置を返し、その文字列内のその文字の出現回数を通知します。

string::size_type find_char(const string &s, char c, string::size_type &occurs)
{
      // Compares the given character with string 
      // Records the first occurrence of that character
      // The change in &occurs is reflected back to the original variable
}

著者は、パラメーターを渡すときに「コピーを回避するためのconst参照」を使用し、関数が変更されないパラメーターには「参照パラメーター」を使用することを推奨しています。なぜ彼らは参照パラメータを作らなかったのですか?char cconst

4

2 に答える 2

5

char cなぜ彼らはconst参照パラメータを作らなかったのですか?

charconstは非常に小さいので、参照(またはその他)ではなく値で渡す方が一般的に安価です。

于 2013-01-26T10:16:49.290 に答える
1

@NPEが述べているcharように、すべての組み込み型と同様に、ポインタや参照と同じくらい簡単に値を渡すことができます。

技術的には、組み込み型へのポインターまたは参照の作成と値の受け渡しに速度の違いはありませんが、そのポインターまたは参照を逆参照して基になる値にアクセスすると、パフォーマンスが低下します。コンパイラーには、参照が関係している場合に利用可能ないくつかの最適化戦略があります。これは、値を渡すのが速くないことを意味する場合があります。しかし、一般的に言って、オプティマイザーが実行するかどうかに依存するべきではありません。ほとんどの場合、それはあなたが思うことをしません。

一般的な経験則では、組み込み型を値で渡し、ユーザー定義型を参照(またはポインター)で渡します。このルールを破ることを余儀なくされる状況がありますが、それらに遭遇したときにあなたはそれらを知るでしょう。

于 2013-01-26T10:34:35.580 に答える