que es más rápido, y que es más flexible: printf o cout? [duplicar]
Pregunta
Duplicados posibles:
printf vs cout en C ++
cin o printf ??
siempre me he preguntado acerca de printf y cout .. ¿cuál es en última instancia, más rápido, y es que el más flexible, así (es decir, puede imprimir una serie de variables, y la salida pueden formatearse)?
P.S. Sé que esto se parece a 'printf' vs 'cout' en C ++ , pero realmente no estoy haciendo la misma cosa.
Solución
Respuesta corta ??h2>
más rápido: printf
Más flexible: cout
Long respuesta ??h2>
Cuando se compara con la familia sprintf, los flujos de C ++ se supone que son más lentos (por un factor de 6 si recuerdo un artículo de C ++ excepcional, por Herb Sutter). Aún así, la mayor parte del tiempo, no se necesita esta velocidad, pero hay que estar seguro de que no se molestó su código.
Y es fácil de hacer algo mal con la familia printf de funciones, ya sea poniendo un número incorrecto de argumentos, el tipo equivocado, o incluso introducen vulnerabilidad potencial de seguridad (el% n especificador viene a la mente) en el código.
A menos que realmente quererlo (y luego, se llama sabotaje), es casi imposible hacerlo mal con las corrientes C ++. Ellos se encargan de todos los tipos perfectamente conocidos (Build-ins, std :: cuerdas, etc.), y es fácil para extenderla. Por ejemplo, digamos que tengo un objeto "Coordinate3D", y que quiero imprimir sus datos:
#include <iostream>
struct Coordinate3D
{
int x ;
int y ;
int z ;
} ;
std::ostream & operator << (std::ostream & p_stream
, const Coordinate3D & p_c)
{
return p_stream << "{ x : " << p_c.x
<< " , y : " << p_c.y
<< " , z : " << p_c.z << " }" ;
}
int main(int argc, char * argv[])
{
Coordinate3D A = {25,42,77} ;
std::cout << A << std::endl ;
// will print "{ x : 25 , y : 42 , z : 77 }"
return 0 ;
}
El problema con la corriente es que son bastante difíciles de manejar correctamente cuando se quiere especificar el formato de algunos datos (espacios de relleno para los números, por ejemplo), y que, a veces, que realmente necesita para ir rápido. Entonces, o retroceder a printf, o probar algunas alternativas de alta velocidad C ++ ( FastFormat viene a la mente).
Editar: Nota que Thomas serie' de las pruebas muestran resultados interesantes (que reproduje en este momento en mi equipo), es decir: cout
y printf
tienen actuaciones similares cuando se evita utilizando std::endl
(que elimina la salida, además de outputing una \n
).
Otros consejos
- más rápido: printf
- Más typesafe y extensible: cout
- Mejor: depende! Me gusta
printf
más.
que no estoy solo en el pensamiento de que la forma en C ++ 's cout no formateo es simplemente épica fallar.