C'è una sorta di sottile differenza tra quelli:C++: differenza tra la "commerciale" e "&" e l'asterisco "*" nella dichiarazione di funzione/metodo?
void a1(float &b) {
b=1;
};
a1(b);
e
void a1(float *b) {
(*b)=1;
};
a1(&b);
?
Entrambi fanno lo stesso (o così sembra da main()), ma il primo è ovviamente più breve, tuttavia la maggior parte del codice che vedo usa la seconda notazione. C'è una differenza? Forse nel caso in cui si tratti di qualche oggetto invece di galleggiare?
Ora prova a capire quale vuoto a1 (float && b) significa in C++ 0x. :) –
Sarebbe bello anche aver spiegato perché un LHS e potrebbe essere preferibile a * in alcune situazioni, o addirittura necessario affatto se abbiamo * per i riferimenti. –
@ T.Webster: i riferimenti sono immutabili. Ciò significa che quando ne fai uno si riferisce sicuramente a qualcosa (quindi non può essere NULL, il compilatore ti costringe a specificare in modo esplicito a cosa si riferirà), e una volta che lo hai fatto non può mai essere fatto riferimento a nient'altro. Sono più sicuri perché non puoi accidentalmente fare cose stupide come l'aritmetica dei puntatori quando non intendevi farlo. –