std::ranges::view_interface<D>::empty
constexpr bool empty()
requires ranges::sized_range<D> || ranges::forward_range<D>;
|
(1) | (depuis C++20) |
constexpr bool empty() const
requires ranges::sized_range<const D> || ranges::forward_range<const D>;
|
(2) | (depuis C++20) |
L'implémentation par défaut de la fonction membre empty() vérifie si la taille de l'objet du type dérivé est 0 (si elle est valide), ou si l'itérateur de début et la sentinelle sont égaux.
derived une référence liée à static_cast<D&>(*this). Équivalent à return ranges::size(derived) == 0; si D satisfait sized_range. Sinon, équivalent à return ranges::begin(derived) == ranges::end(derived);.derived est static_cast<const D&>(*this).Valeur de retour
true
si la taille de l'objet du type dérivé est
0
(si
D
satisfait
std::ranges::sized_range
), ou si son itérateur de début et le sentinelle sont égaux,
false
sinon.
Notes
Les types dérivés suivants peuvent utiliser l'implémentation par défaut de
empty
:
- std::ranges::common_view
- std::ranges::drop_view
- std::ranges::drop_while_view
- std::ranges::elements_view
- std::ranges::filter_view
- std::ranges::join_view
- std::ranges::lazy_split_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
| (depuis C++26) |
Bien que
std::ranges::basic_istream_view
hérite de
std::ranges::view_interface
et ne déclare pas la fonction membre
empty()
, elle ne peut pas utiliser l'implémentation par défaut, car elle ne satisfait jamais ni
std::ranges::sized_range
ni
std::ranges::forward_range
.
Exemple
#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(5)).empty()); static_assert((a | std::views::drop(5)).empty()); static_assert(!(a | std::views::drop(3)).empty()); static_assert(std::views::iota(0,0).empty()); static_assert(!std::views::iota(0).empty()); }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3715 | C++20 |
empty()
ne prenait en charge que les types
forward_range
|
Les types
sized_range
uniquement sont également pris en charge
|
Voir aussi
|
(C++17)
|
vérifie si le conteneur est vide
(modèle de fonction) |
|
(C++20)
|
vérifie si une plage est vide
(objet de point de personnalisation) |