# std::ranges::views::empty, std::ranges::empty_view

< cpp‎ | ranges

template<class T> requires std::is_object_v<T> class empty_view : public ranges::view_interface<empty_view<T>> | (1) | (C++20 起)
namespace views { template<class T> inline constexpr empty_view<T> empty{}; } | (2) | (C++20 起)

1) 产生无特定类型元素的 `view` 的范围工厂。
2) `empty_view` 的变量模板。

### 成员函数

begin [静态] (C++20) | 返回 nullptr (公开静态成员函数)
end [静态] (C++20) | 返回 nullptr (公开静态成员函数)
data [静态] (C++20) | 返回 nullptr (公开静态成员函数)
size [静态] (C++20) | 返回 ​0​ （零） (公开静态成员函数)
empty [静态] (C++20) | 返回 true (公开静态成员函数)
##### 继承自 std::ranges::view_interface
operator bool (C++20) | 返回派生视图是否为非空。若 ranges::empty 可应用于它则提供。 (`std::ranges::view_interface<D>` 的公开成员函数)
front (C++20) | 返回派生视图中的首元素。若视图满足 `forward_range` 则提供。 (`std::ranges::view_interface<D>` 的公开成员函数)
back (C++20) | 返回派生视图中的末元素。若视图满足 `bidirectional_range` 与 `common_range` 则提供。 (`std::ranges::view_interface<D>` 的公开成员函数)
operator[] (C++20) | 返回派生视图中的第 n 个元素。若视图满足 `random_access_range` 则提供。 (`std::ranges::view_interface<D>` 的公开成员函数)

## std::ranges::empty_view::begin

static constexpr T* begin() noexcept { return nullptr; } |  | (C++20 起)

`empty_view` 不引用任何元素。

## std::ranges::empty_view::end

static constexpr T* end() noexcept { return nullptr; } |  | (C++20 起)

`empty_view` 不引用任何元素。

## std::ranges::empty_view::data

static constexpr T* data() noexcept { return nullptr; } |  | (C++20 起)

`empty_view` 不引用任何元素。

## std::ranges::empty_view::size

static constexpr std::size_t size() noexcept { return 0; } |  | (C++20 起)

`empty_view` 始终为空。

## std::ranges::empty_view::empty

static constexpr bool empty() noexcept { return true; } |  | (C++20 起)

`empty_view` 始终为空。

### 辅助模板

template<class T> inline constexpr bool enable_borrowed_range<ranges::empty_view<T>> = true; |  | (C++20 起)

`std::ranges::enable_borrowed_range` 的此特化使得 `empty_view` 满足 `borrowed_range` 。

### 注解

尽管 `empty_view` 从 `view_interface` 获得成员函数 `front`、 `back` 及 operator[] ，对它们的调用始终导致未定义行为，因为 `empty_view` 始终为空。

继承的 operator bool 转换函数始终返回 false 。

### 示例

    #include <ranges>

    int main()
    {
        std::ranges::empty_view<long> e;
        static_assert(std::ranges::empty(e));
        static_assert(0 == e.size());
        static_assert(nullptr == e.data());
        static_assert(nullptr == e.begin());
        static_assert(nullptr == e.end());
    }

### 参阅

ranges::single_view views::single (C++20) | 含有具有指定值的单个元素的 `view` (类模板) (定制点对象)
views::all_t views::all (C++20) | 包含 `range` 的所有元素的 `view` (别名模板) (范围适配器对象)
ranges::ref_view (C++20) | 某个其他 `range` 的元素的 `view` (类模板)