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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top