tutorialspoint structur significado pointer new dogs array c++ pointers reference

significado - structur c++



¿Por qué los punteros a una referencia son ilegales en C++? (4)

¿Cuál sería la diferencia entre un puntero a una referencia (al objeto) y un puntero al objeto real? La referencia no se puede cambiar para referirse a otro objeto. Solo usa un puntero regular al objeto en cuestión.

Por otro lado, una referencia a un puntero, como cualquier otra referencia, le da un manejo modificable a una variable particular. Resulta ser un puntero en este caso.

Como el título en sí mismo menciona: ¿por qué el puntero a una referencia es ilegal, mientras que el reverso es legal en C ++?

Gracias.


El concepto de alto nivel que hace referencia a implementar es solo otro nombre para un objeto existente . Puede tener un puntero a un objeto (o función), pero no puede tener un puntero al nombre de un objeto. Por esta misma razón, la idea de un puntero a una referencia no tiene sentido. En otras palabras, las referencias son inmateriales, en general, simplemente no existen en la memoria. No existen como algo que se pueda señalar.

Es cierto que en muchos casos, en la práctica, las referencias ocupan memoria (y se implementan como punteros disfrazados). Pero eso solo es un detalle de implementación específico para algunos contextos particulares. En general, las referencias no ocupan memoria, como se establece explícitamente en la especificación del lenguaje que se sigue inmediatamente de la especificación del lenguaje.


Porque una referencia no es algo a lo que se pueda apuntar, que a su vez se debe a que en realidad no tiene que representarse en ningún lugar de la memoria. Existen referencias para dar nombres alternativos a cosas ya existentes. Puede obtener un puntero al objeto renombrado, pero eso es un puntero a un valor, no un puntero a una referencia.


Un puntero necesita apuntar a un objeto . Una referencia no es un objeto.

Si tiene una referencia r , una vez que se inicializa, cada vez que usa r , en realidad está utilizando el objeto al que se refiere la referencia.

Debido a esto, no puede tomar la dirección de una referencia para poder obtener un puntero en primer lugar. Considera el siguiente código:

int x; int& rx = x; int* px = ℞

En la última línea, &rx toma la dirección del objeto al que se hace referencia por rx , por lo que es exactamente lo mismo que si hubiera dicho &x .