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со статической и динамической протяжённостью.
| (начиная с C++23) |
| (начиная с 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
См. также
|
(C++20) | невладеющее представление непрерывной последовательности объектов (шаблон класса) |
|
(C++23) | дескриптор многомерного индексного пространства некоторого ранга (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/span/dynamic_extent