# std::ranges::view_interface<D>::empty

< cpp‎ | ranges‎ | view interface

constexpr bool empty() requires ranges::forward_range<D>; | (1) | (C++20 起)
constexpr bool empty() const requires ranges::forward_range<const D>; | (2) | (C++20 起)

`empty` 成员函数的默认实现检查起始迭代器与哨位是否比较相等。

1) 令 `derived` 为绑定到 static_cast<D&>(*this) 的引用。等价于 return ranges::begin(derived) == ranges::end(derived); 。
2) 同 (1) ，除了 `derived` 为 static_cast<const D&>(*this) 。

### 参数

（无）

### 返回值

若派生类型对象的起始迭代器与哨位比较相等则为 true ，否则为 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::iota_view
- std::ranges::join_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

尽管 std::ranges::basic_istream_view 继承自 std::ranges::view_interface 并且不声明 `empty` 成员函数，它仍无法使用默认实现，因为它决不满足 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(2)).empty() );
        static_assert(   (a | std::views::drop(9)).empty() );
        static_assert( ! (a | std::views::drop(2)).empty() );
        static_assert(   std::views::iota(0,0).empty() );
        static_assert( ! std::views::iota(0).empty() );
    }

### 参阅

empty (C++17) | 检查容器是否为空 (函数模板)
ranges::empty (C++20) | 检查范围是否为空 (定制点对象)