che è più veloce, e che è più flessibile: printf o cout? [duplicare]
Domanda
possibili duplicati:
printf vs cout in C ++
cin o printf ??
Mi sono sempre chiesto circa printf e cout .. che uno è in ultima analisi, più veloce, ed è il più flessibile, così (cioè possibile stampare una serie di variabili, e emessi possono essere formattati)?
P.S. So che questo è simile a 'printf' vs 'cout' in C ++ , ma Io non sono davvero chiedendo la stessa cosa.
Soluzione
Risposta breve
Più veloce: printf
Più flessibile: cout
Risposta lunga
Quando confrontato con la famiglia sprintf, i flussi C ++ si suppone essere più lento (di un fattore 6 se ricordo un elemento di eccezionale C ++, da Herb Sutter). Eppure, la maggior parte del tempo, non avrete bisogno questa velocità, ma è necessario per essere sicuri che il codice non viene spiati.
Ed è facile da fare qualcosa di sbagliato con la famiglia printf di funzioni, sia mettendo il numero errato di argomenti, il tipo sbagliato, o anche introducono potenziale vulnerabilità di sicurezza (il% n specificatore viene in mente) nel codice.
A meno che davvero volerlo (e poi, si chiama sabotaggio), è quasi impossibile sbagliare con i flussi C ++. Si trattano i tipi senza soluzione di continuità tutti noti (build-in, std :: stringhe, etc.), ed è facile per estenderlo. Per esempio, diciamo che ho un oggetto "Coordinate3D", e che voglio stampare i propri dati:
#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 ;
}
Il problema con il flusso è che sono piuttosto difficili da gestire correttamente quando si vuole specificare il formato di alcuni dati (spazi imbottitura per i numeri, per esempio), e che a volte, è davvero bisogno di andare veloce. Poi, sia ricadere a printf, o provare alcune alternative ad alta velocità C ++ ( FastFormat viene in mente).
Modifica Si noti che Thomas ' serie di test mostrano risultati interessanti (che ho riprodotto in questo momento sul mio computer), che è: cout
e printf
hanno prestazioni simili quando uno evita di usare std::endl
(che svuota l'uscita, oltre a outputing un \n
).
Altri suggerimenti
- Più veloce: printf
- Più typesafe ed estensibile: cout
- Una migliore: dipende! Mi piace
printf
di più.
che non sono solo nel pensare che il modo in C ++ 's cout non è solo la formattazione epic fail.