punto punteros operador estructuras anidadas c++ pointers

c++ - operador - punteros a estructuras



¿Qué puedo usar en lugar del operador de flecha, `->`? (5)

¿Para qué sirve el operador de flecha ( -> )?


El lenguaje C ++ define el operador de flecha ( -> ) como un sinónimo para desreferenciar un puntero y luego usar el . -operador en esa dirección.

Por ejemplo:

Si tiene un objeto, un Objeto y un puntero, un Puntero:

SomeClass anObject = new SomeClass(); SomeClass *aPointer = &anObject;

Para poder utilizar uno de los métodos de los objetos, puede eliminar la referencia del puntero y hacer una llamada a un método en esa dirección:

(*aPointer).method();

Que podría escribirse con el operador de flecha:

aPointer->method();

La razón principal de la existencia del operador de flecha es que acorta el tipeo de una tarea muy común y también es fácil olvidar los paréntesis que rodean la desreferenciación del puntero. Si olvidó los paréntesis,.-Operator enlazará más fuerte que * -operator y hará que nuestro ejemplo se ejecute como:

*(aPointer.method()); // Not our intention!

Algunas de las otras respuestas también mencionaron que los operadores de C ++ pueden estar sobrecargados y que no es tan común.


En C ++ 0x, el operador obtiene un segundo significado, que indica el tipo de retorno de una función o expresión lambda

auto f() -> int; // "->" means "returns ..."


Las siguientes dos expresiones son equivalentes:

a->b (*a).b

(sujeto a la sobrecarga del operador, como menciona Konrad, pero eso es inusual).


Lo leo principalmente de derecha a izquierda y llamo "in"

foo->bar->baz = qux->croak

se convierte en:

"baz in bar in foo se convierte en croak en qux".


a->b es generalmente un sinónimo de (*a).b . Los paréntesis aquí son necesarios debido a la fuerza vinculante de los operadores * y . : *ab no funcionaría porque . se une más fuerte y se ejecuta primero. Esto es equivalente a *(ab) .

Sin embargo, tenga cuidado con la sobrecarga: dado que tanto -> como * pueden estar sobrecargados, su significado puede variar drásticamente.