Namespaces
Variants

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

From ko.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
거짓 거짓 참 거짓 참 참 거짓 거짓 참
거짓 참 거짓 거짓 참 거짓 거짓 거짓 참
거짓 참 참 거짓 참 참 거짓 거짓 참
참 거짓 거짓 거짓 거짓 거짓 참 참 거짓
참 거짓 참 거짓 참 참 참 거짓 참
참 참 거짓 거짓 참 거짓 참 거짓 참
참 참 참 거짓 참 참 참 거짓 참