Aumenta el mantenimiento. Si tiene un tipo T y llama a una función con él, entonces necesita cambiar T, si la función ha sido sobrecargada para la nueva T, entonces puede recompilarla instantáneamente. En C tendrías que retroceder y buscar en todos los sitios de llamadas y cambiar la función llamada. Tome sqrt(). Si quiere sqrt() un float, entonces tiene que cambiar a sqrtf(). No solo eso, pero el volumen y la complejidad del sistema de tipos de C++ es mucho mayor que en C, y tener que tener nombres de funciones separados para cada posible sobrecarga agotaría rápidamente el conjunto razonable de nombres para funciones que sirven para el mismo propósito. pero tome diferentes argumentos, porque ahora hay muchos más argumentos que tomar.
Por ejemplo, compare las bibliotecas de cadenas C y C++. La biblioteca de cadenas C ofrece un método para agregar a una cadena - strcat(). El std :: string :: append de C++ tiene ocho sobrecargas. ¿Cómo quieres llamarlos? append_a, append_b, etc.? Eso es ridículo: todos cumplen la misma función, solo que de diferentes maneras.
Edit: es realmente vale la pena mencionar que append
es un muy mal ejemplo, muchos de los C++ sobrecargas de cuerda son muy redundante. Sin embargo, este es un caso más general que eso y no todos de esas sobrecargas redundantes.
Uno podría preguntar: ¿por qué, oh, por qué, no se sobrecarga la función en C? Haría mi vida más fácil ... – Raveline
@Raveline: no, no lo haría. – JeremyP
@Raveline: dos palabras; nombre mangling. La pesadilla del desarrollador de objetos compartidos. – falstro