¿Para qué sirve el ampersand cuando se usa después del nombre de clase como ostream& operator

2 minutos de lectura

Avatar de usuario de Omar
Omar

Sé todo sobre punteros y el ampersand significa “dirección de”, pero ¿qué significa en esta situación?

Además, al sobrecargar operadores, ¿por qué es común declarar los parámetros con const?

Avatar de usuario de Kyle Walsh
kyle walsh

En ese caso, está devolviendo una referencia a un objeto ostream. Pensar estrictamente en ampersand como “dirección de” no siempre funcionará para usted. AquíHay información de C++ FAQ Lite sobre referencias.

En lo que respecta a las constantes, la corrección de las constantes es muy importante en la seguridad de tipos de C++ y es algo que querrá hacer tanto como pueda. Otro página de las preguntas frecuentes ayuda en ese sentido. const lo ayuda con los cambios relacionados con los efectos secundarios, estropeando sus datos en situaciones en las que no lo espera.

avatar de usuario de nathan
nathan

Dependiendo del contexto del ampersand, puede significar 2 cosas diferentes. La respuesta a su pregunta específica es que es una referencia, no “la dirección de”. Son cosas muy diferentes. Es muy importante entender la diferencia.

Referencia de C++

La razón para hacer que los parámetros sean constantes es asegurarse de que la función no los cambie. Esto garantiza a la persona que llama a la función que los parámetros que pasan no cambiarán.

  • Cuando usa un ampersand en una variable ‘normal’, está tomando la dirección de la variable en la memoria; eso es lo que quiso decir Omar. Sin embargo, con las referencias, el & tiene un significado diferente.

    – Jesper

    15 de octubre de 2009 a las 12:34

  • Jesper, tienes razón. Actualicé mi respuesta para hacer la distinción.

    – nathan

    15 de octubre de 2009 a las 12:58

Significa que la variable es una referencia. Es como un puntero, pero no realmente.

Ver: Referencia (C++)

En las declaraciones de tipo C++, el ampersand significa “referencia”. En este caso operator << devuelve una referencia a un ostream objeto.

Ya que en realidad regresa *this en realidad es lo mismo ostream objeto, y significa que puede encadenar llamadas a operator <<similar a ésto:

os << "Hello" << " " << "World" << endl;

¿Ha sido útil esta solución?