Spec-Zone.ru › C++

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.

1) Пусть derived будет static_cast<D&>(*this). Выражение в requires-условии эквивалентно requires { ranges::empty(derived); }, а тело функции эквивалентно return !ranges::empty(derived);.
2) То же, что и (1), за исключением того, что 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

См. также

ranges::empty
(C++20)
проверяет, пуста ли последовательность
(объект-точка настройки)
empty
возвращает признак того, что производное представление пусто; предоставляется только в том случае, если оно удовлетворяет требованиям sized_range или forward_range
(открытая функция-член)
empty
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API