std::ranges::view_interface<D>::empty
constexpr bool empty()
requires ranges::sized_range<D> || ranges::forward_range<D>;
|
(1) | (начиная с C++20) |
constexpr bool empty() const
requires ranges::sized_range<const D> || ranges::forward_range<const D>;
|
(2) | (начиная с C++20) |
Реализация по умолчанию функции-элемента empty() проверяет, равен ли размер объекта производного типа 0 (если это допустимо), или сравнивает начальный итератор и ограничитель на равенство.
derived будет ссылкой, привязанной к static_cast<D&>(*this). Эквивалентно return ranges::size(derived) == 0;, если D удовлетворяет sized_range. В противном случае эквивалентно return ranges::begin(derived) == ranges::end(derived);.derived является static_cast<const D&>(*this).Возвращаемое значение
true
если размер объекта производного типа равен
0
(если
D
удовлетворяет
std::ranges::sized_range
), или его начальный итератор и страж-элемент сравниваются как равные,
false
в противном случае.
Примечания
Следующие производные типы могут использовать реализацию по умолчанию для
empty
:
- std::ranges::common_view
- std::ranges::drop_view
- std::ranges::drop_while_view
- std::ranges::elements_view
- std::ranges::filter_view
- std::ranges::join_view
- std::ranges::lazy_split_view
- std::ranges::reverse_view
- std::ranges::single_view
- std::ranges::split_view
- std::ranges::take_view
- std::ranges::take_while_view
- std::ranges::transform_view
| (начиная с C++26) |
Хотя
std::ranges::basic_istream_view
наследует от
std::ranges::view_interface
и не объявляет функцию-член
empty()
, он не может использовать реализацию по умолчанию, поскольку никогда не удовлетворяет ни
std::ranges::sized_range
, ни
std::ranges::forward_range
.
Пример
#include <array> #include <ranges> int main() { constexpr std::array a{0, 1, 2, 3, 4}; static_assert(!std::ranges::single_view(a).empty()); static_assert((a | std::views::take(0)).empty()); static_assert(!(a | std::views::take(5)).empty()); static_assert((a | std::views::drop(5)).empty()); static_assert(!(a | std::views::drop(3)).empty()); static_assert(std::views::iota(0,0).empty()); static_assert(!std::views::iota(0).empty()); }
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 3715 | C++20 |
empty()
поддерживало только типы
forward_range
|
также поддерживаются типы только
sized_range
|
Смотрите также
|
(C++17)
|
проверяет, является ли контейнер пустым
(шаблон функции) |
|
(C++20)
|
проверяет, является ли диапазон пустым
(объект точки кастомизации) |