


Why Does C Stringstream\'s Failure Handling Differ Before and After C 11?
Nov 25, 2024 am 02:23 AMImpact 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!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

What are the types of values returned by c language functions? What determines the return value?

What are the definitions and calling rules of c language functions and what are the

C language function format letter case conversion steps

Where is the return value of the c language function stored in memory?

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently?

How does the C Standard Template Library (STL) work?
