Maison >développement back-end >C++ >Pourquoi `stringstream >>` modifie-t-il la valeur d'une variable en cas d'échec de l'extraction ?

Pourquoi `stringstream >>` modifie-t-il la valeur d'une variable en cas d'échec de l'extraction ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 05:02:21484parcourir

Why Does `stringstream >>` Modifier la valeur d'une variable en cas d'échec d'extraction ?
>` Modifier la valeur d'une variable en cas d'échec de l'extraction ? " />

Comportement incohérent de Stringstream >> lors de la modification de la valeur en cas d'échec

Comme indiqué par Stroustrup dans TC PL, 3e édition, section 21.3.3, la valeur d'une variable doit rester inchangée en cas d'échec de l'opération de lecture. Cependant, un comportement particulier se produit lors de l'utilisation de stringstream >> type de données non correspondant.

Dans un extrait de code présenté, une variable entière v est initialisée avec 123. Lorsque vous tentez de lire un mot dans cet entier à l'aide de stringstream >>, la valeur de v devient nulle malgré la préservation attendue de sa valeur d'origine.

Cette contradiction apparente est résolue par une précision dans la norme C 11 Auparavant, lors d'une extraction ratée, la valeur. est resté inchangé et le failbit a été défini. Cependant, en C 11, un zéro est maintenant écrit dans la variable et le failbit est toujours défini.

La cause de ce comportement modifié réside dans le changement de std :: Analyse d'entrée de style scanf à l'utilisation de std::strtoll et de fonctions similaires en C 11. Ces fonctions gèrent les conversions numériques d'une manière différente, entraînant la modification de v en cas d'échec de l'extraction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn