Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ändert „stringstream >>' den Wert einer Variablen bei einem Extraktionsfehler?

Warum ändert „stringstream >>' den Wert einer Variablen bei einem Extraktionsfehler?

Barbara Streisand
Barbara StreisandOriginal
2024-11-27 05:02:21384Durchsuche

Why Does `stringstream >>` Den Wert einer Variablen bei einem Extraktionsfehler ändern?
>` Den Wert einer Variablen bei einem Extraktionsfehler ändern? " />

Inkonsistentes Verhalten von Stringstream >> bei Wertänderung bei Fehler

Wie von Stroustrup in TC PL, 3. Auflage, Abschnitt 21.3.3 angegeben, Der Wert einer Variablen sollte bei einem fehlgeschlagenen Lesevorgang unverändert bleiben. Bei der Verwendung von Stringstream tritt jedoch ein besonderes Verhalten auf >> mit einem nicht übereinstimmenden Datentyp.

In einem dargestellten Codeausschnitt wird eine Ganzzahlvariable v mit 123 initialisiert. Beim Versuch, ein Wort mit Stringstream >> in diese Ganzzahl einzulesen, wird die Der Wert von v wird trotz der erwarteten Beibehaltung seines ursprünglichen Werts zu Null.

Dieser scheinbare Widerspruch wird durch eine Klarstellung im C 11-Standard gelöst Bei fehlgeschlagener Extraktion blieb der Wert unverändert und das Failbit wurde gesetzt. Allerdings wird in C 11 nun eine Null in die Variable geschrieben und das Failbit ist weiterhin gesetzt.

Die Ursache für dieses veränderte Verhalten liegt in der Wechsel von der Eingabeanalyse im std::scanf-Stil zur Verwendung von std::strtoll und ähnlichen Funktionen in C 11. Diese Funktionen behandeln numerische Konvertierungen auf andere Weise, was zu einer Änderung von v bei der Extraktion führt Fehler.

Das obige ist der detaillierte Inhalt vonWarum ändert „stringstream >>' den Wert einer Variablen bei einem Extraktionsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn