std::ranges::view_interface<D>::operator bool
constexpr explicit operator bool() requires /* see below */;
|
(1) | (начиная с C++20) |
constexpr explicit operator bool() const requires /* see below */;
|
(2) | (начиная с C++20) |
Реализация функции-элемента operator bool по умолчанию проверяет, является ли представление непустым. Она делает производный тип контекстуально преобразуемым к bool.
derived будет static_cast<D&>(*this). Выражение в requires-предложении равно requires { ranges::empty(derived); }, а тело функции эквивалентно return !ranges::empty(derived);.derived является static_cast<const D&>(*this).Возвращаемое значение
false если значение производного типа пусто (определяется с помощью std::ranges::empty ), true в противном случае.
Примечания
В C++20 ни один тип, производный от std::ranges::view_interface в стандартной библиотеке, не предоставляет собственный operator bool . Почти все эти типы используют реализацию по умолчанию.
Заметным исключением является
std::ranges::basic_istream_view
. Поскольку его тип итератора никогда не удовлетворяет требованиям
forward_iterator
, представление не может использовать унаследованный
operator
bool
.
Пример
#include <array> #include <iostream> #include <ranges> int main() { const std::array ints {0, 1, 2, 3, 4}; auto odds = ints | std::views::filter([](int i) { return 0 != i % 2; }); auto negs = ints | std::views::filter([](int i) { return i < 0; }); std::cout << std::boolalpha << "Has odd numbers: " << (!!odds) << ' ' << '\n' << "Has negative numbers: " << (!!negs) << ' ' << '\n'; }
Вывод:
Has odd numbers: true Has negative numbers: false
Смотрите также
|
(C++20)
|
проверяет, является ли диапазон пустым
(объект точки кастомизации) |
возвращает, является ли производное представление пустым, предоставляется только если оно удовлетворяет
sized_range
или
forward_range
(публичная функция-член) |
|
|
(C++17)
|
проверяет, является ли контейнер пустым
(шаблон функции) |