Maison >développement back-end >C++ >Pourquoi `stringstream >>` modifie-t-il la valeur d'une variable en cas d'échec de l'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!