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

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

Las siguientes dos expresiones son equivalentes:

 a->b (*a).b 

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

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.

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 ..." 

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”.