-1

この例では:

template <typename T>
inline T const& Max (T const& a, T const& b)  { 
    return a < b ? b : a; 
}

具体的には、この部分:

...const& Max (T const& a, T const& b)...

が何に使われているのかわかりません&。がなくても同じ機能を作成できますが、&それでも機能します。ここでアドレスを取得するポイントは何ですか?

4

3 に答える 3

3

&がなくても同じ関数を作成できますが、それでも機能します。

いいえ、できません。アンパサンドを削除すると、機能が大きく異なります。この新しい関数は、渡された引数のコピーを作成し、コピーを返します。アンパサンドを使用すると、関数はコピーを作成しません。戻り値は、大きい方の入力のエイリアスです。

別の例を次に示しconstます。引数と戻り値の両方の修飾子を削除します。この変更により、この関数は割り当ての左側で使用できるようになります。アンパサンドなしでこれを行う方法はありません。

#include <iostream>

template <typename T>
inline T & Max (T & a, T & b)  {   
   return a < b ? b : a;  
}

int main () {
  int a = 1;
  int b = 2;

  Max(a,b) = 42; 

  std::cout << "a=" << a << " b=" << b << "\n";
}
于 2012-08-01T23:32:49.080 に答える
0

この場合の & 記号はアドレスを取得していませんが、参照変数を作成しています。参照は、常に逆参照されるポインターと考えてください。これは実際にはそうではありませんが、それを説明する最も簡単な方法です。

于 2012-08-01T23:21:07.137 に答える
0

その背後にある思考プロセスは基本的に、「(何らかの理由で) 参照渡しをしたいのですが、途中で変更されないようにしたいのです。 const を持つパラメーター。".

それが参照であるという事実は、値を新しいスコープ (関数) にコピーしていないことを意味します。代わりに、関数を呼び出したスコープから元のバージョンを参照しています。const の理由は、単に値が変わらないことを保証するためです。

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/の「const リファレンスによる受け渡し」セクションを読んでください。

const の使用に関する多くの詳細のより完全な説明: http://en.wikipedia.org/wiki/Const-correctness

于 2012-08-01T23:27:13.437 に答える