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 ). Однако неявные преобразования (например, в int ), которые могут происходить с bool , не допускаются.
В C++98, operator bool не мог быть предоставлен напрямую из-за проблемы безопасного bool . Исходное решение в C++98 — предоставление operator void * , который возвращает нулевой указатель, если fail ( ) возвращает true , или ненулевой указатель в противном случае. Это было заменено решением LWG issue 468 , которое позволяет применять Safe Bool idiom .
Начиная с C++11, функции преобразования могут быть explicit . Решение LWG issue 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! |
| ложь | ложь | ложь | истина | ложь | ложь | ложь | истина | ложь |
| ложь | ложь | истина | ложь | истина | истина | ложь | ложь | истина |
| ложь | истина | ложь | ложь | истина | ложь | ложь | ложь | истина |
| ложь | истина | истина | ложь | истина | истина | ложь | ложь | истина |
| истина | ложь | ложь | ложь | ложь | ложь | истина | истина | ложь |
| истина | ложь | истина | ложь | истина | истина | истина | ложь | истина |
| истина | истина | ложь | ложь | истина | ложь | истина | ложь | истина |
| истина | истина | истина | ложь | истина | истина | истина | ложь | истина |