最終更新日時(UTC):
が更新

履歴 編集

variable
<span>

std::dynamic_extent(C++20)

namespace std {
  inline constexpr size_t dynamic_extent = numeric_limits<size_t>::max();
}

概要

dynamic_extentは、動的な要素数をもつことをstd::spanクラスに指示するための定数である。

以下のような状況で、std::spanクラスは動的な要素数をもつようになる:

  • デフォルトテンプレート引数を使用 (デフォルトでdynamic_extentが使用される)
  • 動的な長さをもつ範囲を参照する (std::vectorや、ポインタと要素数の組など)
  • 参照範囲の変更を、動的な値で指定する (s.first<N>()は静的な要素数、s.first(n)は動的な要素数をもつspanオブジェクトを作成する)

動的な要素数をもつstd::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);
  }
}

出力

バージョン

言語

  • C++20

処理系