Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] by using pointers / by references

    Quali sono le principali differenze del passaggio di argomenti a funzione tramite puntatore piuttosto che tramite riferimento?
    Quando è meglio preferire l'utilizzo di un metodo piuttosto che dell'altro?

    Io per ora mi sono sempre attenuto a questo:
    "For the combined reasons of clarity and performance, many C++ programmers prefer that modifiable arguments be passed to functions by using pointers, small nonmodifiable arguments be passed by value and large nonmodifiable arguments be passed to functions by using references to constants."

    Opinioni?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    allora sostanzialmente la referenza è più comoda da usare se non devi lavorare sul puntatore....
    nel senso che se passi una struttura, se passi un puntatore devi usare -> per accedere ai suoi valori; se usi un reference basta il .

    Tuttavia, con il tempo ci si accorge che occorre definire uno standard, per permettere ad altri (o anche a noi stessi a distanza di tempo) di capire il codice che abbiamo scritto.

    Per questo è preferibile utilizzare i puntatori perchè, anche nella chiamata della funzione risulti evidente che quella funzione modificherà il valore della variabile passata.

    Per esempio:

    codice:
     
    typedef struct esempio{....};
    struct esempio prova;
    
    void funzionepunt(struct esempio *punt){....}
    
    void funzioneref(struct esempio &ref){.....}
    
    int main(){
        // si capisce che passa un puntatore, e che quindi ci sarà la modifica di prova
         funzionepunt(&prova);
         //è uguale alla chiamata con passaggio per valore
         //leggendo si potrebbe capire che prova è passata per valore e che quindi non verrà modificata dalla funzione
         funzioneref(prova);
    }
    spero si capisca quello che intendo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466

    Re: [C++] by using pointers / by references

    Originariamente inviato da GliderKite
    Quali sono le principali differenze del passaggio di argomenti a funzione tramite puntatore piuttosto che tramite riferimento?
    Nessuna?

  4. #4
    Originariamente inviato da p91paul
    Per questo è preferibile utilizzare i puntatori perchè, anche nella chiamata della funzione risulti evidente che quella funzione modificherà il valore della variabile passata.
    Non sono d'accordo; i reference hanno a loro volta una serie di vantaggi dalla loro. In primo luogo, un parametro reference consente di evitare di usare l'odiosa sintassi var-> o (*var). necessaria per accedere ai membri di una variabile passata per puntatore; inoltre l'uso dei reference consente di utilizzare oggetti che dispongono di operatori in overload senza doverli dereferenziare.
    Inoltre i reference rendono evidente la semantica di proprietà dell'oggetto passato: dal momento che la funzione chiamata riceve un riferimento, sa con certezza che non tocca a lei deallocarlo; inoltre ad un riferimento non è possibile passare NULL senza andare nella landa dell'undefined behavior, per cui è evidente che il parametro in questione non è opzionale e non ci si può passare NULL.
    Infine, l'uso dei const reference consente di combinare i vantaggi del passaggio per valore (la variabile originale non viene modificata, non serve * e -> per accedere ai membri) e l'efficienza del passaggio per puntatore (non vengono effettuate copie che in caso di oggetti "pesanti" possono essere onerose).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.