El printf
ha sido tomado prestado de C y tiene algunas limitaciones. La limitación mencionada más común de printf
es seguridad de tipo, ya que depende del programador para que coincida correctamente con la cadena de formato con los argumentos. La segunda limitación que proviene nuevamente del entorno varargs es que no puede extender el comportamiento con los tipos definidos por el usuario. El printf
sabe cómo imprimir un conjunto de tipos, y eso es todo lo que obtendrá de él. Aún así, por las pocas cosas para las que se puede usar, es más rápido y simple formatear cadenas con printf
que con las secuencias C++.
Si bien la mayoría de los compiladores modernos son capaces de abordar el tipo de limitación de seguridad y al menos proporcionar advertencias (el compilador puede analizar el formato y verificar los argumentos proporcionados en la llamada), la segunda limitación no se puede superar. Incluso en el primer caso, hay cosas con las que el compilador no puede ayudar, como verificar la terminación nula, pero de nuevo, el mismo problema va con std::cout
si lo usa para imprimir la misma matriz.
En el otro extremo, las corrientes (incluyendo std::cout
) puede ser extendido para manejar tipos definidos por el usuario por medio de sobrecargado std::ostream& operator<<(std::ostream&, type const &)
por cualquier usuario dado definido tipo type
. Son seguros por sí mismos: si pasa un tipo que no tiene operator<<
sobrecargado, el compilador se quejará. Son, por otro lado, más engorroso para producir salida formateada.
¿Qué debes usar? En general, prefiero usar transmisiones, ya que la sobrecarga de operator<<
para mis propios tipos es simple y se pueden usar de manera uniforme con todos los tipos.
Si está escribiendo código C++, en general, debería preferir las librerías y los géneros C++. –
Depende del idioma en el que escribe su programa, ya sea C o C++. Estos dos métodos son de un lenguaje diferente, por lo que no se puede comparar directamente. –
@Paul R. Gracias por su respuesta. Entonces, ¿no se considera "printf()" una expresión idiomática de C++? –