Namespaces
Variants

std::basic_ios<CharT,Traits>:: operator bool

From cppreference.net
operator /* unspecified-boolean-type */ ( ) const ;
(1) (C++11 이전)
explicit operator bool ( ) const ;
(2) (C++11 이후)

스트림에 오류가 없는지 확인합니다.

1) false 로 평가되는 값을 반환합니다. 이는 fail ( ) true 를 반환하는 경우에 해당하며, 그렇지 않으면 true 로 평가되는 값을 반환합니다.
2) 스트림에 오류가 없고 I/O 작업을 수행할 준비가 되었으면 true 를 반환합니다. 구체적으로 ! fail ( ) 를 반환합니다.

이 연산자는 스트림과 스트림에 대한 참조를 반환하는 함수를 루프 조건으로 사용할 수 있게 하여, 다음과 같은 관용적인 C++ 입력 루프를 가능하게 합니다: while ( stream >> value ) { ... } 또는 while ( std:: getline ( stream, string ) ) { ... } . 이러한 루프들은 입력 연산이 성공한 경우에만 루프 본문을 실행합니다.

목차

매개변수

(없음)

반환값

1) 스트림에 오류가 없을 경우 boolean 컨텍스트에서 true 로 평가되는 값, 그렇지 않을 경우 boolean 컨텍스트에서 false 로 평가되는 값.
2) true 스트림에 오류가 없는 경우, false 그렇지 않은 경우.

참고 사항

이 변환은 bool 이 예상되는 상황(예: if 조건문 )에서 사용될 수 있습니다. 그러나 bool 과 함께 발생할 수 있는 암시적 변환 (예: int 로의 변환)은 허용되지 않습니다.

C++98에서는 operator bool 를 직접 제공할 수 없었는데, 이는 safe bool 문제 때문입니다. C++98의 초기 해결책은 operator void * 를 제공하는 것이었으며, 이는 fail ( ) true 를 반환하면 null 포인터를, 그렇지 않으면 null이 아닌 포인터를 반환합니다. 이는 LWG 이슈 468 의 해결로 대체되었으며, 이를 통해 Safe Bool 관용구 를 적용할 수 있게 되었습니다.

C++11부터 변환 함수는 explicit 로 선언할 수 있습니다. LWG 이슈 1094 의 해결을 통해 명시적 operator bool 가 도입되었으며, 이제 불리언 변환은 안전합니다.

예제

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s("1 2 3 error");
    int n;
    std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\n';
    while (s >> n)
        std::cout << n << '\n';
    std::cout << "s is " << static_cast<bool>(s) << '\n';
}

출력:

s is true
1
2
3
s is false

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 468 C++98 operator void * 가 제공됨 지정되지 않은 불리언 타입으로의 변환 함수가 대신 제공됨

참고 항목

다음 표는 가능한 모든 basic_ios 접근자( good() , fail() 등)의 값을 ios_base::iostate 플래그 조합에 대해 보여줍니다:

**번역 결과:** (HTML 태그와 속성, 태그 내 텍스트, C++ 특정 용어는 번역하지 않고 원본 형식을 유지함)
ios_base::iostate 플래그 basic_ios 접근자
eofbit failbit badbit good() fail() bad() eof() operator bool operator!
false false false true false false false true false
거짓 거짓 거짓 거짓 거짓
거짓 거짓 거짓 거짓 거짓 거짓
거짓 거짓 거짓 거짓
거짓 거짓 거짓 거짓 거짓 거짓
거짓 거짓 거짓
거짓 거짓 거짓 거짓
거짓 거짓