Home > Backend Development > C++ > Why Does C Stringstream\'s Failure Handling Differ Before and After C 11?

Why Does C Stringstream\'s Failure Handling Differ Before and After C 11?

Mary-Kate Olsen
Release: 2024-11-25 02:23:29
Original
195 people have browsed it

Why Does C   Stringstream's Failure Handling Differ Before and After C  11?

Impact of Failure Handling on Target Value with stringstream

In C streams, the behavior of failure handling differs depending on the stream type and the version of the language. This discrepancy is exemplified by the unexpected behavior observed when reading a word into an integer variable using stringstream.

Traditionally, as stated in Stroustrup's TC PL (3rd Edition), if an input operation fails, the target variable should remain unaltered in certain data types. However, when encountering a type mismatch in stringstream, the variable's value is modified, contradicting the cited quote.

C 11 Modification

The reason for this discrepancy lies in the change implemented in C 11. Pre-C 11, stringstream employed scanf-style parsing to extract numbers. In C 11, this method was replaced with calling functions such as std::strtoll, which modify the target in case of failure.

Consequently, the change in parsing strategy introduced different failure behavior. Before C 11, the target remained unmodified, while in C 11 and later, the target is set to zero on failure.

Verification and Analysis

To verify this theory, consult a reference such as the one provided in the answer. This reference explains that prior to C 11, failure in extraction left the value unmodified and set the failbit. However, in C 11 and onward, failure results in a zero value for the target and the failbit being set.

Additionally, the reference states that the input operator relies on the num_get locale facet, which utilizes the do_get function. In C 11, do_get has been modified to use std::strtoll and similar functions, thus causing the observed behavior change.

The above is the detailed content of Why Does C Stringstream\'s Failure Handling Differ Before and After C 11?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template