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

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

Barbara Streisand
Freigeben: 2024-11-27 05:02:21
Original
495 Leute haben es durchsucht

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage