- span[meta header]
- std[meta namespace]
- variable[meta id-type]
- cpp20[meta cpp]
namespace std {
inline constexpr size_t dynamic_extent = numeric_limits<size_t>::max();
}
- size_t[link /reference/cstddef/size_t.md]
- numeric_limits[link /reference/limits/numeric_limits.md]
- max()[link /reference/limits/numeric_limits/max.md]
dynamic_extent
は、動的な要素数をもつことをstd::span
やstd::mdspan
に指示するための定数である。
以下のような状況で、span
クラスは動的な要素数をもつようになる:
- デフォルトテンプレート引数を使用 (デフォルトで
dynamic_extent
が使用される) - 動的な長さをもつ範囲を参照する (
vector
や、ポインタと要素数の組など) - 参照範囲の変更を、動的な値で指定する (
s.
first
<N>()
は静的な要素数、s.
first
(n)
は動的な要素数をもつspan
オブジェクトを作成する)
#include <span>
#include <cassert>
#include <vector>
int main()
{
{
std::vector<int> v = {1, 2, 3, 4, 5};
std::span<int> s{v};
static_assert(decltype(s)::extent == std::dynamic_extent);
assert(s.size() == v.size());
}
{
int ar[] = {1, 2, 3, 4, 5};
std::span s{ar};
static_assert(decltype(s)::extent == 5);
// 先頭3要素を参照する。
// 1. 動的な要素数を指定する
std::span r1 = s.first(3);
static_assert(decltype(r1)::extent == std::dynamic_extent);
assert(r1.size() == 3);
// 2. 静的な要素数を指定する
std::span r2 = s.first<3>();
static_assert(decltype(r2)::extent == 3);
assert(r2.size() == 3);
}
}
- std::dynamic_extent[color ff0000]
- s.size()[link span/size.md]
- r1.size()[link span/size.md]
- r2.size()[link span/size.md]
- C++20
- Clang: 9.0 [mark verified]
- GCC: ??
- Visual C++: ??