>` Meine Variable bei Extraktionsfehler in C 11 auf Null setzen? " />
Warum ändert Stringstream >> den Wert des Ziels bei einem Fehler?
In modernem C (ab C 11) ist das Verhalten von >> ;-Operator für Stringstream, wenn eine Extraktion fehlschlägt. Gemäß dem C 11-Standard wird die Zielvariable bei einem Fehler auf einen Standardwert gesetzt (normalerweise Null). Ganzzahlen) und das Failbit-Flag ist gesetzt.
Vor C 11 war das Verhalten anders, laut Stroustrups Zitat aus „TC PL, 3rd Edition“, sollte die Zielvariable jedoch unverändert bleiben Das bereitgestellte Codebeispiel zeigt einen Widerspruch, bei dem die Zielvariable v nach einem fehlgeschlagenen Extraktionsversuch auf Null gesetzt wird.
Dieses scheinbar widersprüchliche Verhalten kann durch die Tatsache erklärt werden, dass die Das Snippet wird im C 11-Modus kompiliert, wodurch sich das Verhalten des >>-Operators wie folgt ändert:
Im Beispielcode enthält der Stringstream Eine Zeichenfolge, die nicht in eine Ganzzahl konvertiert werden kann, was zu einem Analysefehler führt. Im C 11-Modus führt dieser Fehler dazu, dass v auf 0 gesetzt wird, wie in der Ausgabe beobachtet. Das Failbit-Flag ist ebenfalls gesetzt, wie durch die Meldung „state: failbit“ angezeigt.
Diese Verhaltensänderung wurde mit C 11 eingeführt, um eine konsistente Behandlung von Extraktionsfehlern für Stream-Extraktoren sicherzustellen. Es steht im Einklang mit dem allgemeinen Prinzip, dass Stream-Extraktoren die Zielvariable im Falle eines Fehlers (wenn möglich) nicht ändern sollten.
Das obige ist der detaillierte Inhalt vonWarum setzt „stringstream >>' meine Variable bei einem Extraktionsfehler in C 11 auf Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!