Поделиться через


empty_view class (стандартная библиотека C++)

Представление без элементов. Это представление полезно для тестовых целей, таких как вызов кода, который должен быть предоставлен с представлением, но не требует доступа к его базовым данным.

Синтаксис

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 higher
#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 higher
#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
Классы представления