Namespaces
Variants

std:: dynamic_extent

From cppreference.net
定义于头文件 <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::extents 中。
(since C++23)
  • 用于指示 std::mdspan 的填充布局将动态存储其填充值。
(since 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)
多维索引空间的维度描述符
(类模板)