Comportement standard de tellp sur ostringstream vide
-
22-08-2019 - |
Question
J'ai une question sur le comportement standard d'appeler tellp
sur un ostringstream
vide. J'ai une fonction foo qui appelle tellp
la première chose:
void foo(std::ostream& os)
{
std::ostream::pos_type pos = os.tellp();
// do some stuff.
}
int main()
{
std::ostringstream os;
foo(os);
}
Dans Visual Studio 2005, appelant cette fonction avec une nouvelle création et les résultats de ostringstream
vides dans la variable pos
à fixer à un pos_type
invalide, ce qui dans Visual Studio 2005 est réglé sur pos_type(_BADOFF)
.
ofstream
n'a pas le même comportement, où revient tellp
pos_type(0)
, qui est une pos_type
valide.
Est-ce un comportement normal conforme? Est-ce un comportement cohérent avec d'autres compilateurs?
La solution
27.6.2.4:
pos_type tellp();
Renvoie: si fail () = faux, retours! pos_type (-1) pour indiquer l'échec. Dans le cas contraire, les retours rdbuf () -.> pubseekoff (0, cabot , sur )
pubseekoff renvoie -1 fail. Mais je ne suis pas sûr de savoir pourquoi cela se produit pour vous dans le cas de ostringstream , était peut-être trop fatigué pour trouver les mots sur non défini ou en fonction de la mise en œuvre . En utilisant mon bon sens, je dirais que pour ostringstream cela devrait donner 0, par défaut construit ostream -1, et pour ostream avec le fichier fraîchement ouvert 0.