streamstring sstream print operator example español c++ c++11 stringstream

c++ - sstream - stringstream eof



Configurar el contenido de un std:: stringstream con str(const char*) tiene extrañas consecuencias (2)

El modo de apertura predeterminado para un objeto std::stringstream está in | out in | out El uso de un modo diferente anula estas opciones. Dado que no se puede escribir en la secuencia, el operador de inserción no se puede utilizar para escribir en la secuencia. Es por esto que str() da la misma salida dos veces.

También debe abrir manualmente la secuencia en el modo de salida:

std::stringstream ssb("Setting string", std::ios_base::out | std::ios_base::ate);

Demo en vivo

Alternativamente, use un std::ostringstream , que inicializa el subobjeto std::stringbuf interno out | mode out | mode

std::ostringstream("Setting string", std::ios_base::ate);

Demo en vivo

Utilizo std::stringstream extensivamente para generar código. Me he encontrado con un comportamiento inquisitivo al configurar el contenido con la función str() seguido de usar el operator<< . ¿Puede alguien explicarme este comportamiento? Lo agradecería mucho, gracias.

Ejemplo uno:

std::stringstream ssa; ssa.str("Setting string"); std::cout << ssa.str() << std::endl; ssa << " adding to string"; std::cout << ssa.str() << std::endl;

Salida:

Cadena de ajuste

añadiendo a la cadena

Esperado:

Cadena de ajuste

Configuración de la cadena añadiendo a la cadena

Entonces, después de leer un poco la documentación, encontré que debería establecer el modo abierto en ios_base::ate :

std::stringstream ssb(std::ios_base::ate); ssb.str("Setting string"); std::cout << ssb.str() << std::endl; ssb << " adding to string"; std::cout << ssb.str() << std::endl;

Salida:

Cadena de ajuste

Cadena de ajuste

De nuevo (o ahora) esperaría:

Cadena de ajuste

Configuración de la cadena añadiendo a la cadena

¿Por qué obtengo los resultados que soy y cómo obtengo el resultado que quiero? Ei ¿Ser capaz de establecer la string inicial de una string de stringstream y stringstream a esa string ?

Soy consciente de que solo puedo configurar el contenido en la string("") vacía string("") y luego solo usar el <<operator . Esta es, de hecho, la solución que estoy usando. Simplemente no entiendo el comportamiento observado. Y la solución hace que mi código sea más desordenado.


Olvidaste establecer el modo de bandera: std::ios_base::out . Esto funcionará:

std::stringstream ssb(std::ios_base::out | std::ios_base::ate); ssb.str("Setting string"); std::cout << ssb.str() << std::endl; ssb << " adding to string"; std::cout << ssb.str() << std::endl;

Salida:

Setting string Setting string adding to string