std::dynamic_extent

来自cppreference.com
< cpp‎ | container‎ | span
在标头 <span> 定义
inline constexpr std::size_t dynamic_extent = std::numeric_limits<std::size_t>::max();
(C++20 起)

std::dynamic_extentstd::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 << "动态尺度\n";
        else
            std::cout << "静态尺度 = " << 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, 静态尺度 = 5
span2, 动态尺度
span3, 静态尺度 = 5
span4, 动态尺度

参阅

(C++20)
连续的对象序列上的无所有权视图
(类模板)
(C++23)
某秩多维索引空间的一个描述符
(类模板)