Table of Contents
Impact of Failure Handling on Target Value with stringstream
C 11 Modification
Verification and Analysis
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?

Nov 25, 2024 am 02:23 AM

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!

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

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the types of values ​​returned by c language functions? What determines the return value? What are the types of values ​​returned by c language functions? What determines the return value? Mar 03, 2025 pm 05:52 PM

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 What are the definitions and calling rules of c language functions and what are the Mar 03, 2025 pm 05:53 PM

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

Gulc: C library built from scratch Gulc: C library built from scratch Mar 03, 2025 pm 05:46 PM

Gulc: C library built from scratch

C language function format letter case conversion steps C language function format letter case conversion steps Mar 03, 2025 pm 05:53 PM

C language function format letter case conversion steps

Where is the return value of the c language function stored in memory? Where is the return value of the c language function stored in memory? Mar 03, 2025 pm 05:51 PM

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

distinct usage and phrase sharing distinct usage and phrase sharing Mar 03, 2025 pm 05:51 PM

distinct usage and phrase sharing

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? Mar 12, 2025 pm 04:52 PM

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

How does the C   Standard Template Library (STL) work? How does the C Standard Template Library (STL) work? Mar 12, 2025 pm 04:50 PM

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

See all articles