Heim > Backend-Entwicklung > C++ > Warum ändert „stringstream' die Zielvariable bei einem Extraktionsfehler in C 11 und höher?

Warum ändert „stringstream' die Zielvariable bei einem Extraktionsfehler in C 11 und höher?

Barbara Streisand
Freigeben: 2024-11-26 15:46:09
Original
523 Leute haben es durchsucht

Why Does `stringstream` Modify the Target Variable on Extraction Failure in C  11 and Later?

Warum funktioniert stringstream >> Zielwert bei Extraktionsfehler nach C 11 ändern?

Stroustrups „TC PL“ besagt, dass der Wert einer Zielvariablen unverändert bleiben sollte, wenn ein istream- oder ostream-Vorgang fehlschlägt. Dies widerspricht jedoch dem beobachteten Verhalten mit stringstream:

#include <iostream>
#include <sstream>

int main() {
  std::stringstream ss;
  int v = 123;
  ss << "The quick brown fox.";
  if (ss >> v) {
    std::cout << "Unexpected success in reading a word into an int!\n";
  }
  std::cout << "After extraction failure: " << v << "\n";
  return 1;
}
Nach dem Login kopieren

Dieser Code gibt „Nach Extraktionsfehler: 0“ aus, trotz Stroustrups Behauptung.

C 11-Verhaltensänderung

Dieser Widerspruch ergibt sich aus einer Änderung des Stringstream-Verhaltens nach C 11. Vor C 11 Stringstream verwendete eine Analysemethode im Scanf-Stil und ließ den Zielwert bei einem Fehler unverändert. Seit C 11 wird jedoch std::strtoll verwendet, das eine Null in die Wertvariable schreibt und bei einem Extraktionsfehler das Failbit setzt.

Diese Änderung stimmt mit dem überarbeiteten C 11-Verhalten von istream- und ostream-Operationen überein:

  • Bei einem Fehler wird der Zielwert auf 0 oder den entsprechenden Extremwert gesetzt.
  • Failbit wird auf gesetzt Geben Sie den Fehler an.

Schlussfolgerung

Während Stroustrups Zitat das Verhalten von istream- und ostream-Operationen vor C 11 genau beschreibt, weicht das Verhalten von stringstream nach C 11 ab von dieser Beschreibung abweichen, da ein anderer Extraktionsmechanismus verwendet wurde. In C 11 und höher ist es wichtig, sich dieses veränderten Verhaltens bei der Verwendung von Stringstream-Operationen bewusst zu sein.

Das obige ist der detaillierte Inhalt vonWarum ändert „stringstream' die Zielvariable bei einem Extraktionsfehler in C 11 und höher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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