std::basic_ios<CharT,Traits>:: operator bool
|
operator
/* unspecified-boolean-type */
(
)
const
;
|
(1) | (C++11 이전) |
|
explicit
operator
bool
(
)
const
;
|
(2) | (C++11 이후) |
스트림에 오류가 없는지 확인합니다.
이 연산자는 스트림과 스트림에 대한 참조를 반환하는 함수를 루프 조건으로 사용할 수 있게 하여, 다음과 같은 관용적인 C++ 입력 루프를 가능하게 합니다: while ( stream >> value ) { ... } 또는 while ( std:: getline ( stream, string ) ) { ... } . 이러한 루프들은 입력 연산이 성공한 경우에만 루프 본문을 실행합니다.
목차 |
매개변수
(없음)
반환값
참고 사항
이 변환은 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 플래그 조합에 대해 보여줍니다:
| ios_base::iostate 플래그 |
basic_ios
접근자
|
|||||||
eofbit
|
failbit
|
badbit
|
good() | fail() | bad() | eof() | operator bool | operator! |
| false | false | false | true | false | false | false | true | false |
| 거짓 | 거짓 | 참 | 거짓 | 참 | 참 | 거짓 | 거짓 | 참 |
| 거짓 | 참 | 거짓 | 거짓 | 참 | 거짓 | 거짓 | 거짓 | 참 |
| 거짓 | 참 | 참 | 거짓 | 참 | 참 | 거짓 | 거짓 | 참 |
| 참 | 거짓 | 거짓 | 거짓 | 거짓 | 거짓 | 참 | 참 | 거짓 |
| 참 | 거짓 | 참 | 거짓 | 참 | 참 | 참 | 거짓 | 참 |
| 참 | 참 | 거짓 | 거짓 | 참 | 거짓 | 참 | 거짓 | 참 |
| 참 | 참 | 참 | 거짓 | 참 | 참 | 참 | 거짓 | 참 |