Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Представление без элементов. Это представление полезно для тестовых целей, таких как вызов кода, который должен быть предоставлен с представлением, но не требует доступа к его базовым данным.
Синтаксис
template<class T>
requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;
Параметры шаблона
T
Тип элемента. Несмотря на отсутствие элементов в диапазоне empty_view, все диапазоны являются однородными. То есть они имеют элементы определенного типа. Таким образом, несмотря на отсутствие empty_view элементов, он по-прежнему имеет тип, например empty_view int, или strings, и т. д.
Просмотр характеристик
Описание следующих записей см. в разделе "Просмотр характеристик класса"
| Characteristic | Description |
|---|---|
| Адаптер диапазона | views::empty |
| Базовый диапазон | нет |
| Тип элемента | Как указано при empty_view создании |
| Просмотр категории итератора | contiguous_range |
| Размер | Да. Всегда возвращает значение 0 |
Is const-iterable |
Да |
| Общий диапазон | Да |
| Заимствуемый диапазон | Да |
Участники
| Функции-члены | Description |
|---|---|
| КонструкторыC++20 | empty_viewСоздание . |
beginC++20 |
Возвращает nullptr. |
endC++20 |
Возвращает nullptr. |
sizeC++20 |
Возвращает значение 0 |
Наследуется от view_interface |
Description |
backC++20 |
Приводит к неопределенному поведению. |
dataC++20 |
Возвращает nullptr. |
emptyC++20 |
Возвращает true. |
frontC++20 |
Приводит к неопределенному поведению. |
operator[]C++20 |
Приводит к неопределенному поведению. |
operator boolC++20 |
Возвращает false. |
Замечания
Лучший способ создания empty_view — использовать empty адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.
Так как в некоторых оптимизациях компилятора не может быть никаких элементов empty_view. Например, компилятор будет устранять for (auto e : std::views::empty<int>) {...} , так как он знает, что нет ничего, чтобы итерировать.
Другим вариантом empty_view является empty_view разделение split_view с разделителем, что приводит к диапазону диапазонов отдельных элементов.
Требования
Заголовок: <ranges> (с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20 или более поздней версии требуется.
Конструкторы
Создайте экземпляр empty_view.
template<class T>
inline constexpr empty_view<T> empty{};
Параметры
T
Тип базового элемента, из которого нет.
Замечания
Лучший способ создания empty_view — использовать empty адаптер диапазона.
Пример: empty_view.
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
int main()
{
auto anEmptyView = std::views::empty<int>;
bool isNotEmpty = (bool)anEmptyView;
std::cout << std::boolalpha << isNotEmpty << "\n"; // false
std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true
back
Приводит к неопределенному поведению.
constexpr auto back()
requires ranges::bidirectional_range<T> && ranges::common_range<T>;
constexpr auto back() const
requires ranges::bidirectional_range<const T> && ranges::common_range<const T>;
Параметры
Нет.
Возвращаемое значение
Нет.
Замечания
Вызов этой функции в отладочной сборке вызывает утверждение о том, что функция была вызвана пустой view_interface.
begin
Возвращается nullptr , так как в представлении нет первого элемента.
static constexpr T* begin() noexcept
Возвращаемое значение
nullptr
data
Возвращается nullptr , так как в представлении нет первого элемента для получения указателя.
static constexpr T* data() noexcept
Возвращаемое значение
nullptr.
empty
Проверьте, является ли производное представление пустым.
static constexpr bool empty() noexcept
Параметры
Нет.
Возвращаемое значение
Возвращает true.
end
Возвращается nullptr , так как в представлении нет элементов.
static constexpr T* end() noexcept
Возвращаемое значение
nullptr.
front
Приводит к неопределенному поведению.
constexpr auto front()
requires ranges::forward_range<T>;
constexpr auto front() const
requires ranges::forward_range<const T>;
Параметры
Нет.
Возвращаемое значение
Нет.
Замечания
Вызов этой функции в отладочной сборке вызывает утверждение о том, что функция была вызвана пустой view_interface.
operator[]
Приводит к неопределенному поведению.
template<ranges::random_access_range R = T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);
template<ranges::random_access_range R = const T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;
Параметры
pos
Позиция, относительно начального итератора элемента, возвращаемого.
Возвращаемое значение
Нет.
Замечания
Вызов этой функции в отладочной сборке вызывает утверждение, которое индекс выходит за пределы диапазона view_interface.
operator bool
Проверьте, не является ли производное представление пустым.
constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };
constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };
Параметры
Нет.
Возвращаемое значение
Возвращает false.
Пример: (bool).
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
int main()
{
auto anEmptyView = std::views::empty<int>;
if (anEmptyView) // check if anEmptyView isn't empty
{
std::cout << "Error: why does an empty_view have elements?\n";
}
else
{
std::cout << "Correct: an empty_view is not not empty\n";
}
}
Correct: an empty_view is not not empty
size
Получите количество элементов в представлении, которое всегда будет равно 0.
static constexpr size_t size()
Параметры
Нет.
Возвращаемое значение
0.
См. также
<ranges>
empty адаптер диапазона
single_view
Классы представления