Newsgroup: it.comp.lang.c++
Titolo: Riferimenti nel passaggio di parametri e ritorno

1) se scivo una funzione che accetta come paramentro un riferimento, non vi
posso passare una costante numerica vero? Dovrei dichiarale il riferimento
const, ma in questo caso non potrei modificarlo, no? Non gli posso passare
neanche il valore ritornato da una funzione, no?
Coonviene usarlo quindi solo per oggetti grandi tipo classi o strutture, non
per i tipi primitivi, no?
2) se decido di restituire un riferimento, ho un leggero aumento di
velocità, dato che non viene restituita una copia di un oggetto, ma
l'oggetto stesso, no? Posso quindi restituire un riferimento ad oggetti che
però non sono stati creati internamente, o comunque il cui ciclo di vita non
finisca quando si esce dalla funzione, no? Quindi restituire un riferimento
ad una variabile locale non funzionerà (e una static), mentre un riferimento
ad un oggetto allocato dinamicamente si, o un riferimento ad un oggetto
esterno, no?
Mi potreste spiegare quando conviene usare un riferimento per passare
parametri e restituirli e quando non conviene (o magari non si può)?
--
Marco Iannaccone     
marc...@tin.it
ICQ: 18748121           Tolkien
"I've... seen things you people wouldn't believe. Attack ships on fire off
the shoulder of Orion.
I watched C-beams... glitter in the dark near the Tanhauser Gate. All
those... moments will be lost... in time..., like... tears... in... rain."
FAQ it.comp.lang.c: 
http://www.programmazione.it/linguaggi/c/itcomplangc.htm
FAQ it.comp.lang.c++: 
http://www.programmazione.it/linguaggi/c/lang_faq.htm

 wrote in message
8pm024$805$1...@nslave1.tin.it...


creato e viene automaticamente dereferenziato.
Anche io mi ero fatto quest'idea inizialmente ma questo
non e' vero. Un riferimento NON e' un puntatore per due
ragioni importanti:
1) Non e' possibile che un riferimento punti a NULL,
   usare cose come:
       int *p=NULL;
       int &i=*p;
 
   risultano in un undefined behaviour.
2) Un riferimento non e' una variabile che ha un suo
   spazio di memoria; in particolare un riferimento
   non ha nessun indirizzo (chiedere l'indirizzo di
   un riferimento restituisce l'indirizzo dell'oggetto
   puntato dal riferimento). Inoltre per la stessa
   ragione non sono ammessi array di riferimenti e
   non sono ammessi puntatori a riferimenti.
Personalmente trovo discutibile che si possano
usare riferimenti come membri di una classe, ma
questo e' permesso dal C++ (anche se ci sono
implicazioni importanti, ad esempio sul funzionamento
dell'operatore di assegnazione che non puo' essere
creato automaticamente dal compilatore).
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 perchè verrebbe distrutta alla fine della sua scope.
Ok, non devo restituire un riferimento ad una variabile locale, ma ad una
globale posso, e anche ad un oggetto allocato dinamicamente.
Comunque, se una funzione accetta come paramentro un riferimento ad un
intero (es_ void funzione( int& a) ), non la posso chiamare passandogli una
costante o il valore di ritorno di una funzione, no?( funzione( 5 ) o
funzione(  fsize(6) ) ). Nel primo caso dovrei dichiarare che accetta un
riferimento const, ma non potrei modificarlo, e nel secondo?


Inoltre, come faccio, tramtie le funzioni friend ad accedere ai membri
privati da una classe derivata?
