2013-02-27 28 views
13

このコードでは、なぜ「double & f(...」)と宣言されているのですか?それはどういう意味ですか、どのように機能しますか?私は私の答えを見つけるためにgoogleを知らない質問です。助けてください。関数宣言の戻り値型でアンパサンドはどのように機能しますか?

double a = 1, b = 2; 
double & f (double & d) { 
    d = 4; 
    return b; 
} 

私はアンパサンド記号は、変数や関数のアドレスを意味し、それはあなたが関数を宣言しているときにそれを書くために理にかなって、なぜ私は表示されません知っている。

+5

いいえ、その文脈の中のアンパサンドは参照を示します。 –

+2

さらにこのアンパサンドは、このコードスニペットの*すべての外観の参照を示します。 – WhozCraig

+2

Btw、 "this function"または "this code"という単語を含むタイトルはほとんど役に立ちません。あなたが探していたものを見つけることができなかったのと同じように、似たような質問をしており、それをSOで見つけたいと思う将来のユーザーを考えてみましょう。これらの問題は、「戻り値の型のアンパサンド」または類似のものとして最もよく記述されている場合、「この関数」を検索する可能性は低いです。 – jogojapan

答えて

12

&演算子が宣言書式で使用されるとき、型の前には「アドレス」を意味するのではなく、「参照先」を意味します。

値に尖っにアクセスするには、あなたが参照渡しか戻りたい場合は、あなたがconstのポインタを渡すために持っていたので、それを逆参照Cには参照が、ありません。 C++では、この概念をより簡単にするための参照を追加し、ポインタ演算によるアドレスの偶発的なウォーキングを防ぎ、ポインタを逆参照する必要性をなくしました。これにより、作業がはるかに簡単になり、よりクリーンで読みやすい構文になります。最初はそれを返す必要はありませんxの電力を計算し、最初の引数、resに結果を格納し、–

void power2 (double& res, double x) { 
    res = x * x; 
} 

double& add (double& x) { 
    return ++x; 
} 

power2()add()

6

この場合、アンパサンドはがアドレスを取って意味するものではありませんが、参照を示している。ここで、fがパラメータとして倍増するの参照を取得して返す関数でありますdoubleへの参照。

彼らは言語の非常に基本的な部分であるので、あなたは、選択のあなたの教科書にC++の参照について読みたいかもしれません。

20

は、これらの二つの機能を考えてみましょう。

2つ目は参照を返します。つまり、この参照に後で新しい値を割り当てることができます。

例:

double res = 0; 

    power2(res, 5); 
    printf("%f\n", res); 


    printf("%f\n", ++add(res)); 

出力:

25.000000 
27.000000 

、それが原因でprintf()コール内部++の使用だ–ない26、第二の出力は27であることに注意してください。

+3

具体的な例のために+1 – jogojapan

+0

私は無礼にしようとしていませんが、その例は理解するのがむしろ困難です – puk

関連する問題