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.

¿Fue útil?

Solución

Respuesta corta

más rápido: printf

Más flexible: cout

Long respuesta

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top