2011-07-10 18 views
1

C++での暗黙の逆参照とは、どういう意味ですか?変数への参照を関数パラメータに渡すと、値の前に&が必要ないのですか?C++の暗黙の逆参照とは何ですか?

+3

?そして、あなたの質問に答えてください:あなたはポインタを逆参照します。参照はポインタではなく、参照です。 – GManNickG

+0

コンストラクタを使った暗黙の変換を意味しますか? – jtbandes

+0

私のコースノートでは簡単に言及されていて、その意味はわかりません。また、Wikiはあまりにも曖昧に思えます。その言葉が存在しない場合は、質問を終わらせてください。 – Mark

答えて

10

教授がポインタと参照の違いを説明しようとしていたとします。

暗黙的な参照解除を行うファンシーポインタとして参照を参照するのは、(技術的には正確ではありませんが)比較的一般的です。

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. 
3

C++は、暗黙的にポインタデリファレンス関数ポインタであるであろうに別の文脈:あなたはこのことを知りました

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

void bar() { 
    void (*pf)() = &foo; 
    (*pf)(); // Explicit dereference. 
    pf(); // Implicit dereference. 
} 
関連する問題