Pregunta

Me encontré con este código.

    std::ostringstream str;
    /// (some usage)
    assert( ! str );

¿Qué significa ostringstream cuando se usa en un contexto bool ?

¿Es posiblemente un uso incorrecto que ocurre para compilar y ejecutar?

¿Fue útil?

Solución

Te dice si la transmisión es actualmente válida. Esto es algo que todas las transmisiones pueden hacer. Una secuencia de archivos, por ejemplo, puede ser inválida si el archivo no se abrió correctamente.

Como nota al margen, esta funcionalidad (probar una secuencia como bool) se logra sobrecargando explícita operator bool en C ++ 11 y posterior y sobrecargando el Operador de conversión void * en versiones anteriores a C ++ 11 .

Aquí hay un enlace que contiene algunos ejemplos de por qué un flujo puede fallar . Esto no es específico para las secuencias de cadenas, pero se aplica a ellas.

Editar: cambió bool a void * después de que Martin York señaló mi error.

Otros consejos

La expresión es válida y evalúa el estado de la secuencia. Esta característica se usa más comúnmente en las secuencias de entrada:

istringstream is;
is.str( "foo" );
int x;
is >> x;

if ( ! is ) {
   cerr << "Conversion failed";
}

No estoy seguro de cómo alguna de las funciones de transmisión estándar podría hacer que un flujo de Ostring se estropee, pero ciertamente podría escribir uno usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top