Estoy aprendiendo C ++ y encontré algo que no puedo entender:
Los búferes de salida se pueden vaciar explícitamente para forzar la escritura del búfer. De forma predeterminada, la lectura se
cin
descargacout
;cout
también se elimina cuando el programa finaliza normalmente.
Entonces, vaciar el búfer (por ejemplo, un búfer de salida): ¿esto borra el búfer al eliminar todo lo que hay en él o lo borra al sacar todo lo que contiene? ¿O vaciar el búfer significa algo completamente diferente?
Has citado la respuesta:
Es decir, es posible que deba "vaciar" la salida para que se escriba en la secuencia subyacente (que puede ser un archivo o, en los ejemplos enumerados, una terminal).
Generalmente, stdout / cout está almacenado en búfer de línea: la salida no se envía al sistema operativo hasta que escribe una nueva línea o vacía explícitamente el búfer. La ventaja es que algo así
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
provoca solo una escritura en el "archivo" subyacente en lugar de seis, lo que es mucho mejor para el rendimiento. La desventaja es que un código como:se generará
.....
de inmediato (para unasleep
implementación exacta , consulte esta pregunta ). En tales casos, querrá un adicional<< std::flush
para asegurarse de que se muestre la salida.Leer
cin
descargascout
para que no necesite una descarga explícita para hacer esto:fuente
sleep()
(POSIX) conSleep()
(Windows)cout
con un espacio de nombres (es decir,std::cout
) pero no lo hizo para elendl
, que también debería requerir esa calificación.Limpia el búfer mostrando todo.
fuente