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) | проверяет, пуст ли контейнер (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/view_interface/operator_bool