std::span<T,Extent>:: span
|
constexpr
span
(
)
noexcept
;
|
(1) | (C++20以降) |
|
template
<
class
It
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(2) | (C++20以降) |
|
template
<
class
It,
class
End
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(3) | (C++20以降) |
|
template
<
std::
size_t
N
>
constexpr span ( std:: type_identity_t < element_type > ( & arr ) [ N ] ) noexcept ; |
(4) | (C++20以降) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( std:: array < U, N > & arr ) noexcept ; |
(5) | (C++20以降) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( const std:: array < U, N > & arr ) noexcept ; |
(6) | (C++20以降) |
|
template
<
class
R
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(7) | (C++20以降) |
|
explicit
(
extent
!
=
std::
dynamic_extent
)
constexpr span ( std:: initializer_list < value_type > il ) noexcept ; |
(8) | (C++26以降) |
|
template
<
class
U,
std::
size_t
N
>
explicit
(
extent
!
=
std::
dynamic_extent
&&
N
==
std::
dynamic_extent
)
|
(9) | (C++20以降) |
|
constexpr
span
(
const
span
&
other
)
noexcept
=
default
;
|
(10) | (C++20以降) |
span
を構築します。
目次 |
パラメータ
| first | - | シーケンスの最初の要素へのイテレータ |
| count | - | シーケンス内の要素数 |
| last | - | シーケンスの最後の要素の次または別の番兵へのイテレータ |
| arr | - | ビューを構築する対象の配列 |
| r | - | ビューを構築する対象の範囲 |
| source | - |
変換元となる別の
span
|
| other | - |
コピー元となる別の
span
|
効果
| オーバーロード |
data()
構築後の値
|
size()
構築後の値
|
|---|---|---|
| ( 1 ) | nullptr | 0 |
| ( 2 ) | std:: to_address ( first ) | count |
| ( 3 ) | last - first | |
| ( 4 ) | std:: data ( arr ) | N |
| ( 5 ) | ||
| ( 6 ) | ||
| ( 7 ) | ranges:: data ( r ) | ranges:: size ( r ) |
| ( 8 ) | il. begin ( ) | il. size ( ) |
| ( 9 ) | source. data ( ) | source. size ( ) |
| ( 10 ) | other. data ( ) | other. size ( ) |
制約条件と補足情報
サイズ要件
extent
が
std::
dynamic_extent
ではなく、かつソース範囲のサイズが
extent
と異なる場合、
span
オブジェクトは構築できません。
これらのオーバーロードは、以下の式の結果が true の場合にのみ、オーバーロード解決に参加します:
|
以下の式の結果が false の場合、動作は未定義です。 |
(C++26まで) |
|
以下の式の結果が false の場合:
|
(C++26以降) |
変換要件
element_type
がソース範囲の要素型と異なり、かつ後者が
資格変換
によって前者に変換できない場合、
span
オブジェクトは構築できません。
これらのオーバーロードは、以下の条件を満たす場合にのみオーバーロード解決に参加します:
std::
is_convertible_v
<
U
(
*
)
[
]
, element_type
(
*
)
[
]
>
が
true
である場合です。ここで
U
は以下のように定義されます:
U
コンセプト要件
いずれかのテンプレート引数が特定のコンセプトをモデル化しない場合、
span
オブジェクトは構築できません。
これらのオーバーロードは、指定されたテンプレートパラメータに対応するテンプレート引数が対応するコンセプトを満たす場合にのみ、オーバーロード解決に参加します。いずれの対応するコンセプトの意味要件も満たさない場合、動作は未定義です:
| オーバーロード |
テンプレート
パラメータ |
コンセプト | 備考 |
|---|---|---|---|
| ( 2 ) |
It
|
contiguous_iterator
|
|
| ( 3 ) |
It
|
contiguous_iterator
|
|
End
|
sized_sentinel_for<It>
|
||
| ( 7 ) |
R
|
contiguous_range
|
|
sized_range
|
|||
borrowed_range
|
std:: is_const_v < element_type > が false の場合のみ必須 |
その他の制約
[
first
,
last
)
が有効な範囲でない場合、動作は未定義です。
-
std::
remove_cvref_t
<
R
>
が
std::spanまたは std::array の特殊化ではない場合。 - std:: is_array_v < std:: remove_cvref_t < R >> が false である場合。
例外
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_span_initializer_list
|
202311L
|
(C++26) |
std::span
の
std::initializer_list
からの構築
(
8
)
|
例
#include <array> #include <iostream> #include <span> #include <vector> void print_span(std::span<const int> s) { for (int n : s) std::cout << n << ' '; std::cout << '\n'; } int main() { int c[]{1, 2, 3}; print_span(c); // 配列から構築 std::array a{4, 5, 6}; print_span(a); // std::arrayから構築 std::vector v{7, 8, 9}; print_span(v); // std::vectorから構築 #if __cpp_lib_span_initializer_list print_span({0, 1, 2}); // initializer_listから構築 #else print_span({{0, 1, 2}}); // 同上、回避策 #endif }
出力:
1 2 3 4 5 6 7 8 9 0 1 2
関連項目
|
基になる連続ストレージへの直接アクセス
(public member function) |
|
|
要素数を返す
(public member function) |
|
span
を代入する
(public member function) |
|
|
(C++17)
(C++20)
|
コンテナまたは配列のサイズを返す
(function template) |
|
(C++17)
|
基になる配列へのポインタを取得する
(function template) |