std::ios_base::sync_with_stdio
static bool 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) |