2013-02-27 13 views
13

In questo pezzo di codice, perché f() viene dichiarato come "double & f (..."? Che cosa significa e come funziona? Non so nemmeno cosa google trovare la risposta al mio domanda. si prega di aiutare.Come funziona la e commerciale nel tipo di ritorno di una dichiarazione di funzione?

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

so segno commerciale significa che l'indirizzo di una variabile o una funzione, ma non vedo il motivo per cui avrebbe senso scrivere quando si dichiara una funzione.

+5

No. La e commerciale nel tuo caso (in quel contesto) indica un riferimento. –

+2

Inoltre la e commerciale indica un riferimento in * ogni * aspetto in questo snippet di codice. – WhozCraig

+2

Btw, i titoli che includono le parole "questa funzione" o "questo codice" sono difficilmente utili. Pensa ai futuri utenti che hanno una domanda simile e vuoi trovarli in SO - proprio come non sei riuscito a trovare quello che stavi cercando. Non è probabile che cerchino "questa funzione" quando il problema che hanno è meglio descritto come "e commerciale in tipo di reso" o simile. – jogojapan

risposta

12

Quando l'operatore & viene utilizzato in un modulo di dichiarazione, preceduto da un tipo non significa "l'indirizzo di" ma un "riferimento a", che è essenzialmente un puntatore automaticamente privo di riferimento con aritmetica del puntatore disabilitata.

Non ci sono riferimenti in C, quindi se si desidera passare o tornare per riferimento, è necessario passare un puntatore const e dereferenziarlo per accedere al valore puntato. Il C++ ha aggiunto riferimenti per rendere questo concetto più semplice, per impedire l'allontanamento accidentale dall'indirizzo con l'aritmetica del puntatore e per salvare la necessità di dereferenziare il puntatore. Ciò semplifica il lavoro con esso e porta a una sintassi più pulita e più leggibile.

6

In questo caso, la e commerciale non è significa prendere un indirizzo, ma denota un riferimento Qui, f è una funzione che prende un riferimento al doppio come parametro e restituisce un riferimento al doppio.

Si potrebbe voler leggere i riferimenti di C++ nel proprio libro di testo, poiché sono una parte fondamentale della lingua.

20

Considerare questi due funzioni: power2() e add():

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

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

La prima calcola la potenza di x e memorizza il risultato nel primo argomento, res, – non ha bisogno di restituirlo.

Il secondo restituisce un riferimento, il che significa che a questo riferimento può essere successivamente assegnato un nuovo valore.

Esempio:

double res = 0; 

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


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

uscita:

25.000000 
27.000000 

Si prega di notare che la seconda uscita è 27, non 26 – è a causa dell'uso di ++ all'interno della chiamata printf().

+3

+1 per esempi concreti – jogojapan

+0

Non sto cercando di essere scortese, ma quell'esempio è piuttosto difficile da comprendere – puk