comportamiento estándar de tellp en ostringstream vacía
-
22-08-2019 - |
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?
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.