Newsgroup: it.comp.lang.c++
Titolo: Passaggio x riferimento e puntatori

Vi è differenza tra il passaggio per riferimento e quello per puntatore??
Se si quale??
Se no.........il compilatore trasforma l'alias(reference) in puntatore???
-- 
Tnk
Luca "Kleidemos" Francesca
Un computer a un altro quando si incontrano:
"Ciao, come ti boota oggi???"

 Se no.........il compilatore trasforma l'alias(reference) in puntatore???
Nel modo di utilizzarlo non c'e' dubbio, accettare un puntatore vuol
dire prevedere di ricevere NULL (assenza del parametro). E' stato
scritto in questo ng, inoltre, che deferenziare un puntatore non valido
e' un errore.
I puntatori sono piu' versatili perche' ti consentono il binding
dinamico tra oggetti e metodi (funzioni virtual)...
Questo link e' passato sul ng qualche settimana fa:
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&oe=UTF-8&th=9bdba5d69fb65039&rnum=1
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
Vuoi dire che le funzioni virtual altro nn sono che i vecchi e cari 
puntatori a funzione del C?


 dinamico tra oggetti e metodi (funzioni virtual)...
No. Sotto questo aspetto non c'č differenza tra puntatori e reference: 
entrambi garantiscono il binding dinamico.
Max

 puntatori a funzione del C?
No :-)
Comunque, IMHO, quanto ha scritto sopra Gian Luigi Alfieri e' errato, 
nel senso che il late binding lo hai anche con i reference.

 nel senso che il late binding lo hai anche con i reference.
Ammetto l'errore, il binding dinamico vale anche per i reference.
Resta in ogni caso la flesibilita' offerta dai puntatori nel prevedere
il valore NULL.


 il valore NULL.
O, se si guarda da un altra prospettiva, il vantaggio della 
impossibilita di avere un alias nullo ;)


 impossibilita di avere un alias nullo ;)
non solo... spesso con i references hai una sintassi piu` 'snella'
-- 
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it.
    - Brian W. Kernighan

 impossibilita di avere un alias nullo ;)
:-) 
Si', pero' a volte si puo' assumere il valore NULL per un data parametro 
come un valore di default per quel parametro stesso.

 come un valore di default per quel parametro stesso.
Pensate all'atoi(), se viene passata una stringa che non contiene numeri
il valore tornato e' cmq 0, ossia non si puo' stabilire se la
conversione e' stata fatta oppure no (a meno di testare una variabile
globale).
Tornare un puntatore vuol dire riuscire anche a comunicare 'non sono
stato capace'. Per esempio una funzione di ricerca in una data struttura
dati torna normalmente NULL se l'elemento non e' stato trovato, come si
fa se viene tornato un reference?


 
un'idea potrebbe essere questa:
http://c2.com/cgi/wiki?NullObjectImplementation
-- 
[...] to fight and conquer in all your battles is not supreme 
excellence; supreme excellence consists in breaking the enemy's 
resistance without fighting.

 fa se viene tornato un reference?
Ad esempio si lancia un'eccezione. Personalmente comunque eviterei in
ogni caso di restituire un reference.
Ciao,
Nicola

 Max
c'è anche da dire che per avere un contenitore di oggetti polimorfici
non puoi fare std::container<obj &> ma solo std::container<obj *> (o
anche std::container<boost::shared_ptr<obj> > ma questa è un'altra
storia...)
ciao ciao
Antonio

 impossibilita di avere un alias nullo ;)
    T & nullref = * static_cast<T * >(0);
-- 
http://www.parashift.com/c++-faq-lite/
http://mindview.net/Books/DownloadSites
http://www.cppreference.com/

 
questo però è undefined behaviour ;-)
-- 
Come un cieco ad un'orgia mi facevo strada palpando