En a question regarding the use of typeid
es C++, sugerí que podría usarse para comparar tipos en comparación de objetos. No lo he visto hecho mucho, pero tenía en mente el equals
de Java.¿Cuál es la diferencia entre los iguales de Java() y el operador de C++ ==?
Looking into Java a bit more, este parece ser el caso: Some say las clases reales de los dos objetos se deben comparar, y some sayinstanceof
es la herramienta adecuada para usar, posiblemente con el doble de despacho. Por supuesto, hay casos en los que uno de los dos es definitivamente más adecuado, pero al menos both options are considered.
En C++, OTOH, apenas podía encontrar el código en el que se comparan los tipos reales. En la mayoría de los casos, se utiliza el doble despacho (con dynamic_cast
), y no pude encontrar a nadie insistiendo en que una comparación de tipo rápido sea lo correcto al comienzo de la verificación de igualdad.
Me pregunto por qué el problema de la comparación de tipo polimórfico tiene dos soluciones aceptables en Java, mientras que en C++, solo una parece ser considerada la mejor práctica. ¿Existen diferencias técnicas significativas, o solo enfoques diferentes?
Nota: Mis afirmaciones se basan en la impresión, conocimiento no concreto. Si están equivocados y Java y C++ son realmente similares en ese aspecto, o diferentes por razones distintas a las anteriores, obviamente será una respuesta aceptable.
En C++ '==' puede estar sobrecargado, por lo que depende del contexto ... – Schnommus
@Schnommus: En Java, 'equals' puede anularse. No hay mucha diferencia allí. –
@Ben Voigt: Buen punto. Eliminaría mi comentario si no fuera por el bien del lector – Schnommus