名前空間
変種
操作

std::dynamic_extent

From cppreference.com
< cpp‎ | container‎ | span
 
 
 
 
ヘッダ <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 の静的エクステントと動的エクステントを区別するため。
  • 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 << "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) [編集]
English 日本語 中文(简体) 中文(繁體)