2013-02-27 6 views
13

In diesem Stück Code, warum f(), wie erklärt wird „double & f (...“ Was es bedeutet und wie funktioniert es? Ich weiß nicht einmal, was die Antwort auf google finden meine Frage. Bitte helfen.Wie funktioniert das Und-Zeichen im Rückgabetyp einer Funktionsdeklaration?

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

ich weiß, kaufmännisches und-Zeichen bedeutet die Adresse einer variablen oder einer Funktion, aber ich sehe nicht, warum es Sinn machen würde, es zu schreiben, wenn Sie eine Funktion deklarieren.

+5

Nein. Das kaufmännische Und in Ihrem Fall (in diesem Kontext) gibt eine Referenz an. –

+2

Weiter das kaufmännische Und es zeigt eine Referenz in * jedem * Aussehen in diesem Code-Snippet. – WhozCraig

+2

Btw, Titel einschließlich der Wörter "diese Funktion" oder "dieser Code" sind kaum nützlich. Denken Sie an zukünftige Benutzer, die eine ähnliche Frage haben und diese in SO finden möchten - so, als ob Sie nicht finden konnten, wonach Sie gesucht haben. Sie werden wahrscheinlich nicht nach "dieser Funktion" suchen, wenn das Problem, das sie haben, am besten als "kaufmännisches Und-Zeichen" oder Ähnliches beschrieben wird. – jogojapan

Antwort

12

Wenn der Operator & in einer Deklarationsform verwendet wird, bedeutet vor einem Typ nicht "die Adresse von", sondern eine "Referenz auf", die im Grunde ein automatisch dereferenzierter Zeiger mit deaktivierter Zeigerarithmetik ist.

Es gibt keine Hinweise in C, wenn Sie also durch Verweis übergeben oder zurückgeben möchten, sollten Sie einen const Zeiger passieren und dereferenzieren das spitze auf den Wert zuzugreifen. C++ fügte Verweise hinzu, um dieses Konzept zu vereinfachen, ein versehentliches Weggehen von der Adresse mit Zeigerarithmetik zu verhindern und die Notwendigkeit der Dereferenzierung des Zeigers zu sparen. Dies erleichtert die Arbeit mit ihm erheblich und führt zu einer saubereren und besser lesbaren Syntax.

6

In diesem Fall wird das und-Zeichen nicht bedeuten eine Adresse nehmen, aber es bezeichnet einen Bezug. Hier f eine Funktion ist, die eine Referenz nimmt als Parameter zu verdoppeln, und gibt eine Verweis auf doppelt.

Sie möchten vielleicht über C++ 's Referenzen in Ihrem Lehrbuch der Wahl zu lesen, da sie ein sehr einfaches Teil der Sprache sind.

20

Betrachten Sie diese zwei Funktionen: power2() und add():

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

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

Die erste die Macht der x und speichert das Ergebnis im ersten Argument berechnet, res, – es nicht zurückkehren muss.

Der zweiter gibt eine Referenz, die später einen neuen Wert zugewiesen werden kann, um dieses Referenzmittel.

Beispiel:

double res = 0; 

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


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

Ausgang:

25.000000 
27.000000 

Bitte beachten Sie, dass der zweite Ausgang ist 27, nicht 26 – es ist wegen der Verwendung von ++ innerhalb des printf() Anruf.

+3

+1 für konkrete Beispiele – jogojapan

+0

Ich versuche nicht unhöflich zu sein, aber dieses Beispiel ist ziemlich schwer zu verstehen – puk

Verwandte Themen