Question

Je suis tombé sur ce code.

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

Que signifie ostringstream lorsqu'il est utilisé dans un contexte bool ?

S'agit-il probablement d'une utilisation incorrecte lors de la compilation et de l'exécution?

Était-ce utile?

La solution

Il vous indique si le flux est actuellement valide. C'est quelque chose que tous les flux peuvent faire. Un flux de fichiers, par exemple, peut ne pas être valide si le fichier n'a pas été ouvert correctement.

Notons que cette fonctionnalité (tester un flux en tant que booléen) est obtenue en surchargeant opérateur explicite bool en C ++ 11 et versions ultérieures et en surchargeant void * opérateur de conversion dans les versions antérieures à C ++ 11 .

Voici un lien contenant quelques exemples de la raison un flux peut échouer . Ce n'est pas spécifique aux flux de chaînes, mais cela s'applique à eux.

Modifier: a remplacé bool par void * après que Martin York eut signalé mon erreur.

Autres conseils

L'expression est valide et évalue l'état du flux. Cette fonctionnalité est plus couramment utilisée sur les flux d'entrée:

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

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

Je ne suis pas sûr que l’une quelconque des fonctions de streaming standard puisse gâcher un flux transparent, mais vous pouvez certainement en écrire un vous-même.

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