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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top