A C ++ quina és la diferència subjacent entre std:: cout i fprintf? L’un és millor o més ràpid que l’altre?


Resposta 1:

Amb std :: cout, l'operador sobrecarregat << és cridat a l'argument mentre que amb fprintf, l'argument es llança a una cadena. La lògica bàsica que hi ha darrere d’ambdues segueix sent la mateixa.

cstdio és més ràpid amb la sincronització activada, però iostream es torna més ràpid i, en alguns casos, molt més ràpid si desactiveu la sincronització entre tots dos. En un bon codi C ++, només s’ha d’utilitzar iostream i així podeu desactivar la sincronització trucant a std :: ios :: sync_with_stdio (fals).

NOTA

Al contrari de la creença popular, si existeix la mateixa funcionalitat tant per a les biblioteques C ++ com per a les biblioteques C, la implementació C ++ gairebé sempre serà millor a causa de les optimitzacions del compilador.


Resposta 2:

Sí, std :: cout és millor. És un std :: ostream, i també ho és std :: stringstream, que és similar a la variant printf anomenada sprintf.

Hi ha diversos problemes amb printf.

  1. Utilitza una cadena de format per especificar no només com imprimir els arguments que queden, sinó també per especificar quins són aquests tipus, que no impliquen el sistema tipus, de manera que el compilador no coneix els tipus de la cosa que sou. impressió. Per solucionar aquest problema, els compiladors més recents C i C ++ intenten interpretar aquesta cadena al temps de compilació, que és un tractament especial per a aquesta funció. No s'ha de tractar especialment cap funció. S'utilitza varargs, que esborren el tipus, de manera que el problema número 1 és prou inconfessable, quan no hauria de ser així.

Un std :: ostream, com std :: cout, té el << operador definit per a cada tipus que voleu imprimir, i la majoria d'ells poden trucar al << operador dels seus tipus primitius per realitzar aquesta tasca. Cada funció << operadora sap el tipus que imprimeix i és completament segura a l'hora de compilar, de manera que el problema en temps d'execució de no passar prou arguments a printf en funció de la cadena de format ja no és un problema perquè un std :: ostream no ' No necessiteu una cadena de format.

Les diferències de velocitat depenen completament de la implememtation, però std :: cout té la capacitat de ser més ràpida que printf a través de la línia.


Resposta 3:

Sí, std :: cout és millor. És un std :: ostream, i també ho és std :: stringstream, que és similar a la variant printf anomenada sprintf.

Hi ha diversos problemes amb printf.

  1. Utilitza una cadena de format per especificar no només com imprimir els arguments que queden, sinó també per especificar quins són aquests tipus, que no impliquen el sistema tipus, de manera que el compilador no coneix els tipus de la cosa que sou. impressió. Per solucionar aquest problema, els compiladors més recents C i C ++ intenten interpretar aquesta cadena al temps de compilació, que és un tractament especial per a aquesta funció. No s'ha de tractar especialment cap funció. S'utilitza varargs, que esborren el tipus, de manera que el problema número 1 és prou inconfessable, quan no hauria de ser així.

Un std :: ostream, com std :: cout, té el << operador definit per a cada tipus que voleu imprimir, i la majoria d'ells poden trucar al << operador dels seus tipus primitius per realitzar aquesta tasca. Cada funció << operadora sap el tipus que imprimeix i és completament segura a l'hora de compilar, de manera que el problema en temps d'execució de no passar prou arguments a printf en funció de la cadena de format ja no és un problema perquè un std :: ostream no ' No necessiteu una cadena de format.

Les diferències de velocitat depenen completament de la implememtation, però std :: cout té la capacitat de ser més ràpida que printf a través de la línia.


Resposta 4:

Sí, std :: cout és millor. És un std :: ostream, i també ho és std :: stringstream, que és similar a la variant printf anomenada sprintf.

Hi ha diversos problemes amb printf.

  1. Utilitza una cadena de format per especificar no només com imprimir els arguments que queden, sinó també per especificar quins són aquests tipus, que no impliquen el sistema tipus, de manera que el compilador no coneix els tipus de la cosa que sou. impressió. Per solucionar aquest problema, els compiladors més recents C i C ++ intenten interpretar aquesta cadena al temps de compilació, que és un tractament especial per a aquesta funció. No s'ha de tractar especialment cap funció. S'utilitza varargs, que esborren el tipus, de manera que el problema número 1 és prou inconfessable, quan no hauria de ser així.

Un std :: ostream, com std :: cout, té el << operador definit per a cada tipus que voleu imprimir, i la majoria d'ells poden trucar al << operador dels seus tipus primitius per realitzar aquesta tasca. Cada funció << operadora sap el tipus que imprimeix i és completament segura a l'hora de compilar, de manera que el problema en temps d'execució de no passar prou arguments a printf en funció de la cadena de format ja no és un problema perquè un std :: ostream no ' No necessiteu una cadena de format.

Les diferències de velocitat depenen completament de la implememtation, però std :: cout té la capacitat de ser més ràpida que printf a través de la línia.


Resposta 5:

Sí, std :: cout és millor. És un std :: ostream, i també ho és std :: stringstream, que és similar a la variant printf anomenada sprintf.

Hi ha diversos problemes amb printf.

  1. Utilitza una cadena de format per especificar no només com imprimir els arguments que queden, sinó també per especificar quins són aquests tipus, que no impliquen el sistema tipus, de manera que el compilador no coneix els tipus de la cosa que sou. impressió. Per solucionar aquest problema, els compiladors més recents C i C ++ intenten interpretar aquesta cadena al temps de compilació, que és un tractament especial per a aquesta funció. No s'ha de tractar especialment cap funció. S'utilitza varargs, que esborren el tipus, de manera que el problema número 1 és prou inconfessable, quan no hauria de ser així.

Un std :: ostream, com std :: cout, té el << operador definit per a cada tipus que voleu imprimir, i la majoria d'ells poden trucar al << operador dels seus tipus primitius per realitzar aquesta tasca. Cada funció << operadora sap el tipus que imprimeix i és completament segura a l'hora de compilar, de manera que el problema en temps d'execució de no passar prou arguments a printf en funció de la cadena de format ja no és un problema perquè un std :: ostream no ' No necessiteu una cadena de format.

Les diferències de velocitat depenen completament de la implememtation, però std :: cout té la capacitat de ser més ràpida que printf a través de la línia.