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

< cpp‎ | ranges‎ | view interface

constexpr auto size() requires ranges::forward_range<D> && std::sized_sentinel_for<ranges::sentinel_t<D>, ranges::iterator_t<D>>; | (1) | (C++20 起)
constexpr auto size() const requires ranges::forward_range<const D> && std::sized_sentinel_for<ranges::iterator_t<const D>, ranges::sentinel_t<const D>>; | (2) | (C++20 起)

`size()` 成员函数的默认实现通过计算哨位与起始迭代器间的差获得范围的大小。

1) 令 `derived` 为 static_cast<D&>(*this) 。等价于 return ranges::end(derived) - ranges::begin(derived); 。
2) 同 (1) ，除了 `derived` 为 static_cast<const D&>(*this) 。

### 参数

（无）

### 返回值

派生类类型值的哨位与起始迭代器间的差。

### 注解

下列派生类型能使用 `size()` 的默认实现：

- std::ranges::drop_while_view

下列类型派生自 std::ranges::view_interface 并且不声明其自身的 `size()` 成员函数，但它们无法使用默认实现，因为其迭代器与哨位类型决不满足 `sized_sentinel_for` ：

- std::ranges::basic_istream_view
- std::ranges::filter_view
- std::ranges::join_view
- std::ranges::split_view
- std::ranges::lazy_split_view
- std::ranges::take_while_view

### 参阅

size ssize (C++17)(C++20) | 返回容器或数组的大小 (函数模板)
ranges::size (C++20) | 返回等于范围大小的整数 (定制点对象)
ranges::ssize (C++20) | 返回等于范围大小的有符号整数 (定制点对象)