Pregunta

Tengo una pregunta sobre el comportamiento estándar de llamar tellp en una ostringstream vacía. Tengo una función foo que se pide tellp lo primero:

void foo(std::ostream& os)
{
    std::ostream::pos_type pos = os.tellp();
    // do some stuff.
}

int main()
{
    std::ostringstream os;
    foo(os);
}

En Visual Studio 2005, llamar a esta función con una nueva creación y los resultados ostringstream vacíos en la variable pos que se establezcan a un pos_type no válido, que en Visual Studio 2005 se establece en pos_type(_BADOFF).

ofstream no tiene el mismo comportamiento, donde los retornos tellp pos_type(0), que es un pos_type válida.

¿Es esta norma comportamiento conforme? Este comportamiento es consistente con otros compiladores?

¿Fue útil?

Solución

27.6.2.4:

pos_type tellp();
  

Las devoluciones: si fallan () = false, vuelve!   pos_type (-1) para indicar fallo.   De lo contrario, los rendimientos   rdbuf () -.> pubseekoff (0, act , a cabo )

y pubseekoff devuelve -1 en fallo. Pero no estoy seguro de por qué esto sucede por que en el caso de ostringstream , tal vez estaba demasiado cansado para encontrar las palabras acerca de Indefinido o dependiente de la implementación . Usando mi sentido común diría que para ostringstream Esto debería dar a 0, por defecto ostream construida -1, y por ostream con el archivo recién abierto 0.

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