std::dynamic_extent
From cppreference.com
| ヘッダ <span> で定義 |
||
| inline constexpr std::size_t dynamic_extent = std::numeric_limits<std::size_t>::max(); |
(C++20以降) | |
std::dynamic_extent は、std::dynamic_extent を使用する任意の型が、値(例:サイズ)を型内で静的に知るのではなく、動的に格納することを示すために一般的に使用される、std::size_t 型の定数です。
これはいくつかのコンテキストで使用されています。
- 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) |
連続したオブジェクトのシーケンスに対する所有権を持たないビュー (class template) |
| (C++23) |
あるランクの多次元インデックス空間の記述子 (class template) |