std::dynamic_extent
来自 cppreference.cn
定义于头文件 <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) |
一个表示某种秩的多维索引空间的描述符 (类模板) |