> 백엔드 개발 > C++ > 본문

추출 실패 시 `stringstream >>`이 변수 값을 수정하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-27 05:02:21
원래의
381명이 탐색했습니다.

Why Does `stringstream >>` 추출 실패 시 변수 값을 수정하시겠습니까?
>` 추출 실패 시 변수 값을 수정하시겠습니까? " />

실패 시 값 수정에 대한 Stringstream의 일관되지 않은 동작>>

TC PL, 3판, 섹션 21.3.3에서 Stroustrup이 설명한 대로, 읽기 작업이 실패해도 변수 값은 변경되지 않은 상태로 유지되어야 합니다. 그러나 stringstream을 사용할 때 특이한 동작이 발생합니다. >> 데이터 유형이 일치하지 않습니다.

표시된 코드 조각에서 정수 변수 v는 123으로 초기화됩니다. stringstream >>을 사용하여 이 정수로 단어를 읽으려고 하면 원래 값이 보존될 것으로 예상됨에도 불구하고 v 값은 0이 됩니다.

이 명백한 모순은 이전에 C 11 표준의 설명으로 해결되었습니다. 추출에 실패하면 값은 변경되지 않고 실패 비트가 설정되었습니다. 그러나 C 11에서는 이제 변수에 0이 기록되고 실패 비트가 여전히 설정됩니다.

이 변경된 동작의 원인은 다음과 같습니다. std::scanf 스타일 입력 구문 분석에서 std::strtoll 및 C 11의 유사한 함수 사용으로 변경. 이러한 함수는 숫자 변환을 다른 방식으로 처리하므로 추출 시 v가 수정됩니다. 실패.

위 내용은 추출 실패 시 `stringstream >>`이 변수 값을 수정하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿