std::ios_base::sync_with_stdio
staticbool sync_with_stdio(bool sync =true); | ||
Establece si los flujos estándar de C++ se sincronizan con los flujos estándar de C después de cada operación de entrada/salida.
Los flujos estándar de C++ son las siguientes: std::cin, std::cout, std::cerr, std::clog, std::wcin, std::wcout, std::wcerr y std::wclog.
Los flujos estándar de C streams son las siguientes: stdin, stdout y stderr.
Para un flujo estándar str, sincronizado con el flujo de C f, los siguientes pares de funciones tienen el mismo efecto:
En la práctica, esto significa que los flujos de sincronizados C++ no tienen búfer y cada operación de E/S en un flujo de C++ se aplica inmediatamente al búfer del flujo de C correspondiente. Esto hace posible mezclar libremente E/S de C++ y C.
Además, se garantiza que los flujos sincronizados de C++ son seguros para hilos (los caracteres individuales generados por múltiples hilos pueden intercalarse, pero no se producen carreras de datos).
Si la sincronización está desactivada, los flujos estándar de C++ pueden almacenar en búfer su E/S de forma independiente, lo que puede ser considerablemente más rápido en algunos casos.
Por defecto, los ocho flujos de C++ estándar están sincronizados con sus respectivos flujos de C.
Si se llama a esta función después de que se haya producido una E/S en el flujo estándar, el comportamiento está definido por la implementación: las implementaciones varían desde ningún efecto hasta la destrucción del búfer de lectura.
Contenido |
[editar]Parámetros
sync | - | La nueva configuración de sincronización. |
[editar]Valor de retorno
El estado de sincronización antes de la llamada a la función.
[editar]Ejemplo
#include <iostream>#include <cstdio> int main(){ std::ios::sync_with_stdio(false);std::cout<<"a\n";std::printf("b\n");std::cout<<"c\n";}
Posible salida:
b a c
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 49 | C++98 | No se especificaba (1) qué estado se devolvía realmente y (2) qué significaba "sincronizado" entre los flujos estándar de C y C++. | Ambos se especifican. |
[editar]Véase también
Escribe al flujo de salida estándar de C stdout. (objeto global) | |
Escribe al flujo de error estándar de C stderr, sin búfer. (objeto global) | |
Escribe al flujo de error estándar de C stderr. (objeto global) |