Namensräume
Varianten
Aktionen

std::dynamic_extent

Von cppreference.com
< cpp‎ | container‎ | span
 
 
 
 
Definiert in Header <span>
inline constexpr std::size_t dynamic_extent = std::numeric_limits<std::size_t>::max();
(seit C++20)

std::dynamic_extent ist eine Konstante vom Typ std::size_t, die im Allgemeinen verwendet wird, um anzuzeigen, dass jeder Typ, der std::dynamic_extent verwendet, seinen Wert (z. B. die Größe) *dynamisch* speichert, anstatt den Wert *statisch* im Typ bekannt zu haben.

Es wird in mehreren Kontexten verwendet

  • Um std::span von statischem und dynamischem Ausmaß zu unterscheiden.
  • Um anzuzeigen, dass das Ausmaß an einem bestimmten Rangindex dynamisch in std::extents gespeichert wird.
(seit C++23)
  • Um anzuzeigen, dass die aufgefüllten Layouts für std::mdspan ihren Auffüllungswert dynamisch speichern werden.
(seit C++26)

[bearbeiten] Hinweis

Da std::size_t ein vorzeichenloser Typ ist, ist eine äquivalente Definition

inline constexpr std::size_t dynamic_extent = -1;

Siehe Ganzzahlige Konvertierungen.

[bearbeiten] Beispiel

#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);
}

Ausgabe

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

[bearbeiten] Siehe auch

(C++20)
eine nicht besitzende Ansicht über eine zusammenhängende Sequenz von Objekten
(class template) [bearbeiten]
(C++23)
ein Deskriptor eines multidimensionalen Indexraums eines bestimmten Rangs
(class template) [edit]