2

C ++での暗黙的な間接参照とは正確にはどういう意味ですか?変数への参照を関数パラメーターに渡すとき、その値を使用するためにその前に&が必要ないということですか?

4

2 に答える 2

12

あなたの先生はポインタと参照の違いを説明しようとしていたと思います。

暗黙的な逆参照を行う派手なポインタとして参照を参照することは、比較的一般的です(技術的には正確ではありませんが)。

int   x    = 5;
int*  xP   = &x;
int&  xR   = x;


xR  = 6; // If you think of a reference as a fancy pointer
         // then here there is an implicit de-reference of the pointer to get a value.

*xP = 7; // Pointers need an explicit de-reference.

考える正しい方法は、「参照は派手なポインタです」を使用しないことです。あなたは彼ら自身の言葉で参照について考える必要があります。これらは基本的に既存の変数の別名です(別名エイリアス)。

したがって、関数を参照して変数を渡す場合。これは、関数がエイリアスを介して渡した変数を使用していることを意味します。この関数には、既存の変数の別名があります。関数が変数を変更すると、参照元の変数(その別の名前)であるため、元の変数が変更されます。

だからあなたの質問に答えるために:

その値を使用するためにその前に&は必要ありませんか?

いいえ、&を追加する必要はありません。

int f(int& x)  // pass a value by reference
{
    x =5;
}

int plop = 8;
f(plop);
// plop is now 5.
于 2011-07-10T04:02:01.537 に答える
4

C ++が暗黙的にポインターを逆参照する別のコンテキストは、関数ポインターを使用する場合です。

void foo() { printf("foo\n"); }

void bar() {
  void (*pf)() = &foo;
  (*pf)(); // Explicit dereference.
  pf(); // Implicit dereference.
}
于 2011-07-11T09:50:13.437 に答える