Namespaces
Variants

std:: dynamic_extent

From cppreference.net
Défini dans l'en-tête <span>
inline constexpr std:: size_t dynamic_extent = std:: numeric_limits < std:: size_t > :: max ( ) ;
(depuis C++20)

std::dynamic_extent est une constante de type std::size_t qui est généralement utilisée pour indiquer que tout type utilisant std::dynamic_extent va dynamiquement stocker sa valeur (par exemple, la taille) plutôt que d'avoir la valeur statiquement connue dans le type.

Il est utilisé dans plusieurs contextes :

  • Pour différencier std::span d'étendue statique et dynamique.
  • Pour indiquer que l'étendue à un certain index de rang sera stockée dynamiquement dans std::extents .
(depuis C++23)
  • Pour indiquer que les dispositions avec remplissage pour std::mdspan stockeront dynamiquement leur valeur de remplissage.
(depuis C++26)

Note

Puisque std::size_t est un type non signé, une définition équivalente est :

inline constexpr std::size_t dynamic_extent = -1;

Voir conversions intégrales .

Exemple

#include <array>
#include <cassert>
#include <cstddef>
#include <iostream>
#include <span>
#include <string_view>
#include <vector>
int main()
{
    auto print = [](std::string_view const name, std::size_t ex)
    {
        std::cout << name << ", ";
        if (std::dynamic_extent == ex)
            std::cout << "dynamic extent\n";
        else
            std::cout << "static extent = " << ex << '\n';
    };
    int a[]{1, 2, 3, 4, 5};
    std::span span1{a};
    print("span1", span1.extent);
    std::span<int, std::dynamic_extent> span2{a};
    print("span2", span2.extent);
    std::array ar{1, 2, 3, 4, 5};
    std::span span3{ar};
    print("span3", span3.extent);
    std::vector v{1, 2, 3, 4, 5};
    std::span span4{v};
    print("span4", span4.extent);
}

Sortie :

span1, static extent = 5
span2, dynamic extent
span3, static extent = 5
span4, dynamic extent

Voir aussi

(C++20)
une vue non propriétaire sur une séquence contiguë d'objets
(modèle de classe)
(C++23)
un descripteur d'un espace d'index multidimensionnel de rang donné
(modèle de classe)