Esta es una climatizada tema.
Algunas personas prefieren usar el C++ IO ya que son seguros para el tipo (no puede haber divergencia entre el tipo del objeto y el tipo especificado en el formato de cadena), y fluyen más naturalmente con el resto del C++ forma de codificación.
Sin embargo, también hay argumentos para las funciones C IO (mis favoritos personales). Algunos de ellos son:
- Se integran más fácilmente con la localización, como a toda la cadena de localizar no se rompe en cadenas más pequeñas, y con un poco de aplicación del localizador pueden reordenar el orden del valor insertado, moverlos en la cadena, ...
- Puede ver directamente el formato del texto que se escribirá (esto puede ser realmente difícil con los operadores de flujo).
- Como no hay alineación, y solo una instancia de la función
printf
, el código generado es más pequeño (esto puede ser importante en el entorno integrado).
- Más rápido que la función C++ en alguna implementación.
Personalmente, no consideraría una mala práctica usar C stream en código C++. Some organisations incluso recomiendo usarlos sobre flujo de C++. Lo que consideraría un estilo malo es usar ambos en el mismo proyecto. La consistencia es la clave aquí, creo.
Como otros han señalado, en una proporción relativamente grande de proyectos, es probable que no los utilizan directamente, sino que se utilizaría un conjunto de función de contenedor (o clases), que se acomoda mejor a su estándar de codificación, y su necesidades (localización, tipo de seguridad, ...). Puede utilizar una u otra interfaz IO para implementar esta interfaz de nivel superior, pero probablemente solo use una.
Editar: la adición de alguna información acerca de la ventaja de la familia función printf
formato relacionados con la localización. Tenga en cuenta que esa información solo es válida para alguna implementación.
Puede usar %m$
en lugar de %
para referenciar el parámetro por índice en lugar de hacer referencia a ellos secuencialmente. Esto se puede usar para reordenar valores en la cadena formateada. El siguiente programa escribirá Hello World!
en la salida estándar.
#include <stdio.h>
int main() {
printf("%2$s %1$s\n", "World!", "Hello");
return 0;
}
posibilidad de traducir este código C++:
if (nb_files_deleted == 1)
stream << "One file ";
else
stream << nb_file_deleted << " files ";
stream << removed from directory \"" << directory << "\"\n";
Esto puede ser muy difícil. Con printf
(y una biblioteca como gettext
para manejar la localización), el código no se mezcla con la cadena. Así podemos pasar la cadena al equipo de localización, y no tendremos que actualizar el código si hay un caso especial en algún idioma (en algún idioma, si el conteo del objeto es 0, usted usa una forma plural, en otro idioma, hay tres formas, una para singular, una cuando hay dos objetos y una forma plural, ...).
printf (ngettext ("One file removed from directory \"%2$s\"",
"%1$d files removed from directory \"%2$s\"",
n),
n, dir);
+1 para la viñeta de localización. Pero, ¿cómo reordenar los valores en printf? –
He actualizado mi publicación para explicar cómo puede reordenar los valores en 'printf' (sugerencia:'% m $ '). –
Gracias por la actualización. Si pudiera, podría volver a votar nuevamente. –