Unas palabras. En C el manejo de archivos no se hace a través de flujos de datos. En efecto, el estándar no dice cómo ha de llevarse a cabo la operación, pero otrora, cuando Unix pululaba en los ordenadores, usualmente se escribía byte por byte al archivo. Esto resultaba costoso si tenías muchos printf's, por lo que la técnica del búfer comenzó a ganar adeptos, sobre todo a raíz de que la memoria RAM se hizo más grande y menos costosa.
En efecto, la idea subyacente al flujo es que hasta que se llena el búfer, se escriben los datos. Esto es, te ahorras tiempo de escritura a cambio de perder un poco de memoria. Es más, si por algún motivo el programa decide que siempre no se debe escribir el búfer, no hay más que limpiarlo. En otro caso, ya te amolaste y tienes que deshacer la cadena.
Considera este código:
cout << "Hola mundo";
if (alguna_razon_misteriosa_para_cambiar_el_buffer) {
cout.clear();
cout << "Cadena cambiada";
}
cout.flush();
Como se puede apreciar, si la evaluación del if da resultado, el flujo se vacía y se cambia. Al final, se llama a flush para que ahora sí escriba en el dispositivo de salida asignado.
Esta técnica realmente es eficiente, tanto, que las últimas versiones de compiladores para Windows, como Visual C++, incorporan esto del flujo para implementar las mismas funciones de C. Es interesante, porque como la librería estándar de C++ demuestra, un flujo --al ser una mera secuencia de bytes-- puede abstraer el concepto de escritura, y direccionarse a donde sea necesario. Cout por default escribe en la pantalla de la consola, pero --por ejemplo-- si se programa una aplicación en Windows con VC, el cout será un cuadro de mensaje (::MessageBox). Esto de los streams está tan extendido y aceptado, que los nuevos lenguajes --como C#-- proporcionan un amplio soporte para estos.
Finalmente, eso de los gotos... bueno, a mí no más no me gusta (opinión muy personal) porque fomenta el "código spagetti". En efecto, la idea de tener un lenguaje estructurado es evitar el código spagetti, a diferencia del viejo fortran, por ejemplo. En fin, cuestión de gustos supongo.
Saludos.