Heim > Artikel > Backend-Entwicklung > Warum ändert „stringstream >>' den Wert einer Variablen bei einem Extraktionsfehler?
>` 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!