Actualmente estoy tratando de implementar una subclase de stringbuf para permitir que el almacenamiento intermedio se convierta en tokens para caracteres específicos ('\ n' en mi caso) y emprender una acción si ocurre esta carbonización (volcar el mensaje a un registrador y borrar el búfer después en mi caso). Para lograr este objetivo, superé sputc (para implementar la supervisión de '\ n') y xsputn (para usar sputc de hecho, ya que la implementación de GCC no parece hacer esto de manera predeterminada). Para fines de depuración, dejo que sputc escriba cada carácter que se le pasa a stdout.Diferencias entre std :: endl y ' n' para implementaciones de streambuffer
Ahora bien, esta es mi pregunta: Si utilizo algo como
mystream << "Some text" << std::endl;
sputc recibe cada personaje, excepto de la '\ n' que debe ser admitido por std :: endl, por lo que la acción que se espera es no hecho porque el '\ n' no se transmite. Si utilizo algo como
mystream << "Some text" << '\n';
o incluso
mystream << "Some text" << "\n" << std::flush;
todo funciona como se esperaba y mi aplicación sputc obtiene el '\ n' Char.
Así que mi pregunta es: ¿No deberían las dos líneas de código de hacer exactamente lo mismo en relación con la stringbuf detrás, y si no, ¿qué otros métodos no tengo que anular para obtener el '\ n'?
'<< std :: endl' hace, precisamente,' << '\ n' << std :: flush; '. –
Hay formas más fáciles de hacer lo que estás tratando de hacer. Tal vez si hace una pregunta sobre el problema real, puede obtener consejos sobre la mejor manera de resolverlo. –