¿Hay algún tipo de diferencia sutil entre los que:C++: ¿diferencia entre ampersand "&" y asterisco "*" en declaración de función/método?
void a1(float &b) {
b=1;
};
a1(b);
y
void a1(float *b) {
(*b)=1;
};
a1(&b);
?
Ambos hacen lo mismo (o eso parece desde main()), pero el primero es obviamente más corto, sin embargo, la mayor parte del código que veo usa segunda notación. ¿Hay una diferencia? Tal vez en caso de que sea un objeto en lugar de flotar?
Ahora trata de averiguar qué significa void a1 (float && b) en C++ 0x. :) –
Sería bueno tener también explicado por qué un LHS y podría ser preferible a * en algunas situaciones, o incluso necesario si tenemos * para referencias. –
@ T.Webster: las referencias son inmutables. Eso significa que cuando haces uno, definitivamente se refiere a algo (por lo que no puede ser NULO, el compilador te obliga a especificar explícitamente a qué se referirá), y una vez que lo hayas hecho, nunca se puede hacer que se refiera a algo más. Están más seguros porque no puedes hacer cosas tontas como la aritmética del puntero cuando no tenías la intención de hacerlo. –