Saltar a contenido

Última actualización:2026-10-12

El operador de desreferencia * en C++

0. Introducción

Normalmente, al manipular punteros, usamos *, por ejemplo:

int a = 1;
int *ptr = a;
std::cout << *ptr << std::endl;
¿Tiene algún otro uso?

La respuesta es afirmativa; por ejemplo, en C++ existen además los tres siguientes:

  • ::*
  • .*
  • ->*

¿Sabes qué significa cada uno de ellos?

1. ::*

::* se denomina Pointer to member declarator, el puntero al declarador de miembro.

Veamos un ejemplo:

En el siguiente ejemplo, ¿cómo obtienes la dirección de w_?

Si lo escribes como double * d = &w_; no es válido, porque no se sabe dónde está w_; por eso se necesita un puntero al declarador de miembro, que permite hacer el enlace, y una vez que se tiene ese puntero ya se puede acceder a los miembros. Sigamos con los otros dos.

class Rectangle {
 public:
  double w_, h_;

  Rectangle(double w, double h) : w_(w), h_(h) {}
  double area() { return w_ * h_; }
};

int main() {
  Rectangle r{2.1, 3.2};
  double Rectangle::* w = &Rectangle::w_;
  r.*w = 2.2;
  std::cout << r.w_ << std::endl;
};

2. .*

.* se conoce como pointer to member of object; este es fácil de entender: es el puntero para acceder a los miembros de un objeto. Los punteros a miembros permiten referirse a los miembros no estáticos de un objeto de una clase. No se puede usar un puntero a miembro para señalar a miembros estáticos de la clase, porque la dirección de un miembro estático no está asociada a ningún objeto en particular.

Por eso, en el ejemplo anterior, esta línea de código modifica el valor del miembro w a 2.2.

r.*w = 2.2;

3. ->*

->* se conoce como pointer to member of pointer; este es todavía más fácil de entender: es similar a ., pero opera sobre la dirección de los miembros de un **objeto puntero*,

Así que el ejemplo correspondiente queda así:

Rectangle r{2.1, 3.2}, *pr;
pr = &r;
std::cout << pr->*w << std::endl;
Para más detalles, consulta cppreference.com.

https://en.cppreference.com/w/cpp/language/pointer#Pointers_to_members

¿Lo has aprendido? Fin de esta sección~

Temas relacionados

Comentarios