Ya he probado varias cosas,
std::stringstream m;
m.empty();
m.clear();
los cuales no funcionan.
fuente
Ya he probado varias cosas,
std::stringstream m;
m.empty();
m.clear();
los cuales no funcionan.
Para todos los tipos de biblioteca estándar, la función miembro empty()
es una consulta, no un comando, es decir, "¿estás vacío?" no "por favor, deseche sus contenidos".
La clear()
función miembro se hereda ios
y se utiliza para borrar el estado de error de la secuencia, por ejemplo, si una secuencia de archivo tiene el estado de error establecido en eofbit
(fin de archivo), la llamada clear()
volverá a establecer el estado de error en goodbit
(sin error) .
Para borrar el contenido de a stringstream
, use:
m.str("");
es correcto, aunque usando:
m.str(std::string());
es técnicamente más eficiente, porque evita invocar al std::string
constructor que toma const char*
. Pero cualquier compilador en estos días debería ser capaz de generar el mismo código en ambos casos, por lo que simplemente elegiría lo que sea más legible.
Puede borrar el estado de error y vaciar el flujo de cadena todo en una línea
Esto restablece efectivamente m a un estado construido por defecto
fuente
parece funcionar.
fuente
Esta debería ser la forma más confiable, independientemente del compilador:
fuente
mm.clear(); mm.str("");
hice el truco. (sin C ++ 11, de lo contrario, el intercambio sería mejor).swap
mejor que la asignación de movimiento?Siempre lo estoy analizando:
fuente
stringstream?
mis 2 centavos:
esto parecía funcionar para mí en xcode y dev-c ++, tenía un programa en forma de menú que, si se ejecutaba iterativamente según la solicitud de un usuario, llenaría una variable de secuencia de cadena que funcionaría bien la primera vez que el código ejecutar pero no borraría el flujo de cadena la próxima vez que el usuario ejecute el mismo código. pero las dos líneas de código a continuación finalmente borraron la variable de secuencia de cadena cada vez antes de llenar la variable de cadena. (2 horas de prueba y error y búsquedas en google), por cierto, usar cada línea por sí solo no funcionaría.
fuente
Es un problema conceptual.
Stringstream es un flujo, por lo que sus iteradores son hacia adelante, no pueden regresar. En un flujo de cadena de salida, necesita un flush () para reinicializarlo, como en cualquier otro flujo de salida.
fuente
Estos no descartan los datos en el flujo de cadena en gnu c ++
Lo siguiente sí vacía el flujo de cadena para mí:
fuente