std::ranges::view_interface<D>::size
来自 cppreference.com
< cpp | ranges | view interface
constexpr auto size() requires ranges::forward_range<D> && std::sized_sentinel_for<ranges::sentinel_t<D>, |
(1) | (自 C++20 起) |
constexpr auto size() const requires ranges::forward_range<const D> && std::sized_sentinel_for<ranges::sentinel_t<const D>, |
(2) | (自 C++20 起) |
size()
成员函数的默认实现通过计算哨兵和起始迭代器之间的差值来获取范围的大小。
内容 |
[编辑] 返回值
1)
to-unsigned-like
(ranges::end(static_cast<D&>(this)) -
ranges::begin(static_cast<D&>(this))).2)
to-unsigned-like
(ranges::end(static_cast<const D&>(this)) -
ranges::begin(static_cast<const D&>(this))).[编辑] 注释
以下派生类型可以使用 size()
的默认实现
以下类型派生自 std::ranges::view_interface 并且没有声明自己的 size()
成员函数,但它们不能使用默认实现,因为它们的迭代器和哨兵类型永远无法满足 sized_sentinel_for
- std::ranges::basic_istream_view
- std::ranges::filter_view
- std::ranges::join_view
- std::ranges::lazy_split_view
- std::ranges::split_view
- std::ranges::take_while_view
[编辑] 缺陷报告
以下行为更改的缺陷报告被追溯地应用于先前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确的行为 |
---|---|---|---|
LWG 3646 | C++20 | size 函数的默认实现返回一个有符号类型 |
它们返回无符号类型 |
[编辑] 参见
(C++17)(C++20) |
返回容器或数组的大小 (函数模板) |
(C++20) |
返回一个等于范围大小的整数 (定制点对象) |
(C++20) |
返回一个等于范围大小的有符号整数 (定制点对象) |