Spec-Zone.ru › C++

std::dynamic_extent

Определено в заголовочном файле <span>
inline constexpr std::size_t dynamic_extent = std::numeric_limits<std::size_t>::max();
(начиная с C++20)

std::dynamic_extent — это константа типа std::size_t, которая обычно используется для указания, что любой тип, использующий std::dynamic_extent, будет хранить своё значение (например, размер) динамически, а не иметь значение, статически заданное в типе.

Она используется в нескольких контекстах:

  • Для различения std::span со статической и динамической протяжённостью.
  • Для указания, что протяжённость на определённом индексе ранга будет храниться динамически в std::extents.
(начиная с C++23)
  • Для указания, что дополненные раскладки для std::mdspan будут динамически хранить значение дополнения.
(начиная с C++26)

Примечание

Поскольку std::size_t является беззнаковым типом, эквивалентное определение выглядит так:

inline constexpr std::size_t dynamic_extent = -1;

См. преобразования целых чисел.

Пример

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

Вывод:

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

См. также

span
(C++20)
невладеющее представление непрерывной последовательности объектов
(шаблон класса)
extents
(C++23)
дескриптор многомерного индексного пространства некоторого ранга
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/span/dynamic_extent

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API